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 的列,并在“=”上进行另一次分割,但随后我将只有大量杂乱无章的标签列和值列。
对每个值使用字典的列表理解并传递给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)