Python 如何在所有列上应用分解

Python 如何在所有列上应用分解,python,pandas,Python,Pandas,我在下面有一个数据框 df = pd.DataFrame({'var1': ['d,e,f', '', np.nan], 'var2': ['1,2', 2, 3]}) 我想把所有的柱子都炸开 df.assign(var1=df['var1'].str.split(',').explode('var1') 我的当前输出低于 var1 var2 0 d 1,2 0 e 1,2 0 f 1,2 1 2 2

我在下面有一个数据框

df = pd.DataFrame({'var1': ['d,e,f', '', np.nan], 'var2': ['1,2', 2, 3]})
我想把所有的柱子都炸开

df.assign(var1=df['var1'].str.split(',').explode('var1')

我的当前输出低于

    var1    var2
0   d        1,2
0   e        1,2
0   f        1,2
1              2
2   NaN        3
我的预期出局了

    var1    var2
0   d        1
0   e        1
0   f        1
0   d        2
0   e        2
0   f        2
1            2
2   NaN      3
  • 我不知道
    的名称,它将出现差异

  • 它每次都会不同,列的长度现在也会增加

  • 我们可以做iloc吗


您可以执行以下操作:

df = df.applymap(lambda x: x.split(',') if type(x) == str else x)
for i in range(1, df.shape[1] + 1):
    df = df.explode(df.columns[-i])
输出:

  var1 var2
0    d    1
0    e    1
0    f    1
0    d    2
0    e    2
0    f    2
1         2
2  NaN    3
另一个具有连续拆分的选项:

for i in range(1, df.shape[1] + 1):
    df[df.columns[-i]] = df[df.columns[-i]].apply(lambda x:
                                                  x.split(',') if type(x) == str else x)
    df = df.explode(df.columns[-i])

你的命令中不应该是
var2
而不是
var1
?为什么在这里使用applymap?我有大约5列/26264行的东西,我得到了内存错误(26264,6)是我的形状眼睛的最终形状,但在分解它的(18,7)@Nons之前,我刚刚尝试了起始形状(20,10)和结果形状(317.700.486,10),没有问题。这花了一段时间,确实使用了相当多的内存,但它工作得很好。