将数据帧字典按行转换为列

2024-09-27 04:26:13 发布

您现在位置:Python中文网/ 问答频道 /正文

DataFrame的源是一个dict列表,如-
ls = [{'fileName': 'file_01', 'col1': {'key1': 'value1a', 'key2': 'value1b'}}, {'fileName': 'file_02', 'col1': {'key1': 'value2a', 'key2': 'value2b', 'key3':'value2c'}}, {'fileName': 'file_03', 'col1': {'key1': 'value3a', 'key3': 'value3c'}}]

数据帧创建为
df = pd.DataFrame(ls, columns=['fileName', 'col1'])

熊猫数据帧df看起来像-

fileName     col1 
file_01      {'key1':value1a, 'key2':value1b}
file_02      {'key1':value2a, 'key2':value2b, 'key3':value2c}
file_03      {'key1':value3a, 'key3':value3c}

我如何将其转换为-

fileName     key1      key2      key3
file_01      value1a   value1b 
file_02      value2a   value2b   value2c
file_03      value3a             value3c

我试过-
df = pd.concat([df['fileName'], pd.get_dummies(df['col1'].apply(pd.Series))], axis=1)

我在某些情况下看到了如下结果:

fileName     key1_value1a     key1_value2a     key1_value3a
file_01      value1a           
file_02                       value2a   
file_03                                        value3a            

Tags: dffilenamefilecol1pdkey2key1key3
3条回答

您可以尝试以下解决方案:

df1 = pd.concat([df['fileName'], df['col1'].apply(pd.Series)], axis=1)

df['col1'].apply(pd.Series)将dict拆分为单独的列

使用^{}

In [40]: pd.concat([df['fileName'], pd.json_normalize(df['col1'])],axis=1)      
Out[40]: 
   fileName     key1     key2     key3
0   file_01  value1a  value1b      NaN
1   file_02  value2a  value2b  value2c
2   file_03  value3a      NaN  value3c

你能试一下吗

df1 = pd.concat([df[['fileName']], pd.DataFrame(df['col1'].to_list())], axis=1)

如果{'key1':value1a, 'key2':value1b}, {'key1':value2a, 'key2':value2b, 'key3':value2c}, ...属于dict类型,则上述方法将起作用

这个解决方案也可以,但是@vorspring提供的solution看起来不错

相关问题 更多 >

    热门问题