将 pandas 中的字符串拆分为单独的列

Tax*_*ney 2 python dataframe pandas

我有一个包含大量数据和 1 列的数据框,其结构如下:

index    var_1
1        a=3:b=4:c=5:d=6:e=3
2        b=3:a=4:c=5:d=6:e=3
3        e=3:a=4:c=5:d=6
4        c=3:a=4:b=5:d=6:f=3
Run Code Online (Sandbox Code Playgroud)

我正在尝试将该列中的数据构造为如下所示:

index    a   b   c   d   e   f
1        3   4   5   6   3   0
2        4   3   5   6   3   0
3        4   0   5   6   3   0
4        4   5   3   6   0   3
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经做了以下事情:

df1 = df['var1'].str.split(':', expand=True)

然后,我可以循环遍历 df1 的列,并在“=”上进行另一次分割,但随后我将只有大量杂乱无章的标签列和值列。

jez*_*ael 5

对每个值使用字典的列表理解并传递给DataFrame构造函数:

comp = [dict([y.split('=') for y in x.split(':')]) for x in df['var_1']]
df = pd.DataFrame(comp).fillna(0).astype(int)
print (df)
   a  b  c  d  e  f
0  3  4  5  6  3  0
1  4  3  5  6  3  0
2  4  0  5  6  3  0
3  4  5  3  6  0  3
Run Code Online (Sandbox Code Playgroud)

Series.str.split或者与expand=Truefor一起使用DataFrame,通过 重塑DataFrame.stack,再次拆分,删除 的第一级MultiIndex并按0列添加新级别,最后通过 重塑Series.unstack:

df = (df['var_1'].str.split(':', expand=True)
                 .stack()
                 .str.split('=', expand=True)
                 .reset_index(level=1, drop=True)
                 .set_index(0, append=True)[1]
                 .unstack(fill_value=0)
                 .rename_axis(None, axis=1))
print (df)
   a  b  c  d  e  f
1  3  4  5  6  3  0
2  4  3  5  6  3  0
3  4  0  5  6  3  0
4  4  5  3  6  0  3
Run Code Online (Sandbox Code Playgroud)