将复杂的列(类似字典)转换为多个列
Transform complex column (dictionary-like) into multiple ones
我有一个包含两行和一列的数据框:
import pandas as pd
raw_data = {'T': [[(0, 0.5), (1, 0.25), (2, 0.25)], [(1, 0.99)]]}
df = pd.DataFrame(raw_data, columns=['T'])
#T
#[(0, 0.5), (1, 0.25), (2, 0.25)]
#[(1, 0.99)]
如您所见,行是一种字典,我知道字典元素的最大数量(在我们的例子中,如果您从 0 开始计数,则为 3 或 2;))。
我想在此数据框中使用以下值创建额外的三列 T0、T1、T2:
T0 T1 T2 (df header)
0.5 0.25 0.25
0 0.99 0
- 可能超过 2 行
- 可能会有更多的列,但这应该不会影响问题
将 list comprehension
与 concat
, then transpose, fillna
and add_prefix
一起使用:
df=pd.concat([pd.Series(dict(x)) for x in raw_data['T']], axis=1).T.fillna(0).add_prefix('T')
print (df)
T0 T1 T2
0 0.5 0.25 0.25
1 0.0 0.99 0.00
我有一个包含两行和一列的数据框:
import pandas as pd
raw_data = {'T': [[(0, 0.5), (1, 0.25), (2, 0.25)], [(1, 0.99)]]}
df = pd.DataFrame(raw_data, columns=['T'])
#T
#[(0, 0.5), (1, 0.25), (2, 0.25)]
#[(1, 0.99)]
如您所见,行是一种字典,我知道字典元素的最大数量(在我们的例子中,如果您从 0 开始计数,则为 3 或 2;))。 我想在此数据框中使用以下值创建额外的三列 T0、T1、T2:
T0 T1 T2 (df header)
0.5 0.25 0.25
0 0.99 0
- 可能超过 2 行
- 可能会有更多的列,但这应该不会影响问题
将 list comprehension
与 concat
, then transpose, fillna
and add_prefix
一起使用:
df=pd.concat([pd.Series(dict(x)) for x in raw_data['T']], axis=1).T.fillna(0).add_prefix('T')
print (df)
T0 T1 T2
0 0.5 0.25 0.25
1 0.0 0.99 0.00