如何将DataFrame中的字典列拆分为新列并保留索引以合并至原数据表?
解决pd.json_normalize拆分字典列后丢失索引的问题
遇到这种索引不对齐的情况,核心是要让拆分后的统计列DataFrame和原DataFrame保持相同的索引,这样合并时就能准确对应每一行数据。下面给你两种实用的解决方案:
方法1:用apply(pd.Series)拆分(推荐,更简洁)
apply(pd.Series)会自动将每个字典转换成对应的列,并且保留原DataFrame的索引,完美解决对齐问题:
import pandas as pd # 假设你的原DataFrame是df # 拆分stats列,自动保留原索引 stats_columns = df['stats'].apply(pd.Series) # 合并原DataFrame(去掉stats列)和拆分后的列 final_df = pd.concat([df.drop('stats', axis=1), stats_columns], axis=1)
运行后final_df就会包含原有的ID、name、value列,以及拆分后的mean、median、std列,每一行数据都能正确对应。
方法2:手动给json_normalize结果设置索引
如果你更习惯用pd.json_normalize,只需要手动把拆分后的DataFrame索引设置为原DataFrame的索引即可:
# 用json_normalize拆分,然后重置索引为原df的索引 stats_columns = pd.json_normalize(df['stats']).set_index(df.index) # 合并到原DataFrame final_df = pd.concat([df.drop('stats', axis=1), stats_columns], axis=1)
这样做的原理是:pd.json_normalize默认会生成从0开始的新索引,我们通过set_index(df.index)强制让它使用原DataFrame的索引,确保合并时行对齐。
你可以打印final_df验证结果,应该就能得到你想要的结构啦!
内容的提问来源于stack exchange,提问作者Birish
相关产品推荐
相关产品推荐

