如何拆分DataFrame中的字典列并保留与id列的关联
解决DataFrame字典列展开并保留id的问题
原DataFrame:
import pandas as pd df = pd.DataFrame({ 'id': [1, 2], 'text': [{'txt': 'en', 'longit': 0, 'latit': 0}, {'txt': 'fr', 'longit': 10, 'latit': 101, 'gross': 120.1}] })
期望输出:
id txt longit latit gross 1 en 0 0 NaN 2 fr 10 101 120.1
你的代码问题分析:
你之前的代码将text列转成列表后生成新DataFrame,虽然能展开字典,但丢失了与原id列的对应关联,导致最终结果没有id列。
两种可行解决方案:
方案1:使用pd.json_normalize(推荐)
json_normalize专门用于解析JSON格式数据(包括字典列),直接结合原id列合并即可:
# 展开text列 expanded_text = pd.json_normalize(df['text']) # 合并id列和展开后的列 result = pd.concat([df['id'], expanded_text], axis=1) print(result)
方案2:使用apply(pd.Series)
对text列应用pd.Series将字典转成列,再与原id列关联:
# 展开text列并关联id result = df['text'].apply(pd.Series).join(df['id']) # 调整列顺序为预期的格式 result = result.reindex(columns=['id', 'txt', 'longit', 'latit', 'gross']) print(result)
两种方法都能得到你想要的结果,其中pd.json_normalize处理复杂字典的效率更高,更适合大规模数据。
内容的提问来源于stack exchange,提问作者math_guy_shy
相关产品推荐
相关产品推荐

