如何将Pandas DataFrame中字典的值提取为新列?
提取Pandas DataFrame中字典列的键值作为新列
方法1:使用pd.json_normalize(推荐,大数据量更高效)
针对你的场景,字典值是单元素列表,需先提取列表内的标量,再与原DataFrame合并:
import pandas as pd # 初始DataFrame df = pd.DataFrame({'a': [1, 2, 3], 'b': [{'x':[101], 'y': [102], 'z': [103]}, {'x':[201], 'y': [202], 'z': [203]}, {'x':[301], 'y': [302], 'z': [303]}]}) # 解析字典列,提取列表中的标量值 dict_df = pd.json_normalize(df['b']).apply(lambda col: col.str[0]) # 合并原列与新生成的列 df_result = pd.concat([df['a'], dict_df], axis=1) print(df_result)
输出结果:
a x y z 0 1 101 102 103 1 2 201 202 203 2 3 301 302 303
方法2:使用apply(pd.Series)
数据量不大时,可直接将字典转成Series再处理:
# 把字典列转为DataFrame,提取列表内的标量 dict_df = df['b'].apply(pd.Series).apply(lambda col: col.str[0]) # 合并得到结果 df_result = pd.concat([df['a'], dict_df], axis=1)
补充说明
你之前用apply得到的是嵌套列表,核心问题是没把字典直接拆分成列。上面两种方法直接将字典的键映射为列名、值映射为对应行内容,再处理列表转标量的问题,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者user7468395
相关产品推荐
相关产品推荐

