Pandas:如何将列的字典映射为单独的列名及其对应的值
我有一个以下格式的数据框Pandas:如何将列的字典映射为单独的列名及其对应的值,pandas,dictionary,pandas-groupby,Pandas,Dictionary,Pandas Groupby,我有一个以下格式的数据框 ip_df=pd.DataFrame({'class':['I','II','III'],'details':[{'sec':'A','kinder':'yes'},{'sec':'B'}] ip_df: class details 0 I {'sec':'A','kinder':'yes'} 1 II {'sec':'B'} 2 III None 如何将字典键作为列名和字典值映射到其各自的“details”列 如
ip_df=pd.DataFrame({'class':['I','II','III'],'details':[{'sec':'A','kinder':'yes'},{'sec':'B'}]
ip_df:
class details
0 I {'sec':'A','kinder':'yes'}
1 II {'sec':'B'}
2 III None
如何将字典键作为列名和字典值映射到其各自的“details”列
如果性能不重要,则将每行转换为
系列
:
ip_df = ip_df.join(ip_df['details'].apply(pd.Series))
print (ip_df)
class details sec kinder
0 I {'sec': 'A', 'kinder': 'yes'} A yes
1 II {'sec': 'B'} B NaN
2 III None NaN NaN
另一种解决方案是通过构造函数删除缺少的值或None
s并创建DataFrame
:
s = ip_df['details'].dropna()
ip_df = ip_df.join(pd.DataFrame(s.tolist(), index=s.index))
print (ip_df)
class details sec kinder
0 I {'sec': 'A', 'kinder': 'yes'} A yes
1 II {'sec': 'B'} B NaN
2 III None NaN NaN
最后,如有必要,将缺少的值转换为None
s:
ip_df = ip_df.mask(ip_df.isna(), None)
print (ip_df)
class details sec kinder
0 I {'sec': 'A', 'kinder': 'yes'} A yes
1 II {'sec': 'B'} B None
2 III None None None
ip_df = ip_df.mask(ip_df.isna(), None)
print (ip_df)
class details sec kinder
0 I {'sec': 'A', 'kinder': 'yes'} A yes
1 II {'sec': 'B'} B None
2 III None None None