假设我收到的数据集具有与此类似的结构(我知道这种结构并不典型。)
以下代码仅是生成一个看起来像我的数据的数据框的示例。
tmp = pd.DataFrame(
[
{'foo': 123, 'bar': [1, 2]},
{'foo': 456, 'bar': [1, 2]}
]
)
foo item
0 123 [1, 2]
1 456 [1, 2]
有没有一种简单的方法来
理想情况下,我想绘制bar [0] vs bar [1]中的所有项目
请注意,栏中的列表不限于2个,其数量可能会有所不同。
答案 0 :(得分:4)
是的,有。使用str.get
tmp.bar.str.get(0)
0 1
1 1
Name: bar, dtype: int64
tmp.bar.str.get(1)
0 2
1 2
Name: bar, dtype: int64
要拆分,请使用pandas DataFrame构造函数
col_names = ['bar.0', 'bar.1'] # Notice you can dinamically create this if needed
pd.DataFrame(tmp.bar.values.tolist(), columns=col_names)
bar.0 bar.1
0 1 2
1 1 2
答案 1 :(得分:2)
对于第二个请求,您可以应用pd.Series
,并与原始数据框串联:
>>> pd.concat((tmp,tmp.bar.apply(pd.Series).add_prefix('bar_')), axis=1)
bar foo bar_0 bar_1
0 [1, 2] 123 1 2
1 [1, 2] 456 1 2
即使bar
中的元素数量可变,此方法也有效:
>>> tmp
bar foo
0 [1, 2, 3] 123
1 [1, 2] 456
>>> pd.concat((tmp,tmp.bar.apply(pd.Series).add_prefix('bar_')), axis=1)
bar foo bar_0 bar_1 bar_2
0 [1, 2, 3] 123 1.0 2.0 3.0
1 [1, 2] 456 1.0 2.0 NaN