如何将DataFrame列中的字典提取为以键为列名的新DataFrame
报错原因
pd.DataFrame.from_dict直接接收存储字典的Series类型输入时,会将每个字典识别为独立标量值,无法自动拆分键值对为列,因此触发需要传入索引的错误提示。
可行解决方法
方法1:使用pd.json_normalize(最推荐,性能最优)
这是Pandas专门用于处理嵌套JSON/字典结构的内置方法,默认自动保留原DataFrame的索引:
import pandas as pd new_DF = pd.json_normalize(old_DF['Col'])
如果使用的Pandas版本极旧发现索引丢失,可以手动指定索引:
new_DF = pd.json_normalize(old_DF['Col']).set_index(old_DF.index)
该方法也支持多层嵌套字典的自定义拆分,适配性更强。
方法2:使用apply转Series(兼容老版本Pandas)
对字典列逐行应用pd.Series,会自动将字典键转为列名、值转为对应单元格内容,同时保留原索引:
new_DF = old_DF['Col'].apply(pd.Series)
写法更简洁,适配低版本Pandas场景,缺点是大数据量下性能弱于方法1。
方法3:修正from_dict写法
如果要继续使用from_dict方法,先将列转为字典列表,再手动指定原索引即可解决报错:
new_DF = pd.DataFrame.from_dict(old_DF['Col'].tolist(), index=old_DF.index)
内容的提问来源于stack exchange,提问作者salamander
相关产品推荐
相关产品推荐

