You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame含字典列展开失败:原因排查与解决方法

问题原因分析

你原来的代码核心问题出在pd.concat的默认行为上:concat默认是按行拼接(axis=0),相当于把原DataFrame p 和展开后的event_properties DataFrame的行上下堆叠,而非左右合并。所以你查询前两行时,取的是原p的行——原p里并没有author列,自然显示NaN,展开后的列数据其实在结果的后半部分,完全不符合你要的“原数据与展开列并列”的需求。

修复方法

方法1:修正concat的轴参数

明确指定axis=1让concat按列合并:

p = df.copy()
# 从event_properties列提取字典列表生成新DataFrame
event_properties = pd.DataFrame(p['event_properties'].tolist())
# 按列拼接原数据和展开后的列
df = pd.concat([p, event_properties], axis=1)
# 可选:删除原event_properties列(如果不需要保留的话)
df = df.drop('event_properties', axis=1)

方法2:用pd.json_normalize高效处理

针对字典列的展开需求,pandas提供了专门的json_normalize方法,处理大型DataFrame时效率更高,还能自动处理嵌套字典:

# 直接展开event_properties列的所有字典键为新列
expanded_df = pd.json_normalize(df['event_properties'])
# 按列合并原DataFrame和展开后的结果
df = pd.concat([df, expanded_df], axis=1)
# 可选:删除原event_properties列
df = df.drop('event_properties', axis=1)

执行以上任意一种方法后,再查询df[['event_properties', 'author']][:2],就能看到author列正确填充对应的值,不存在该键的行则自动填充NaN(对应你说的None,pandas中用NaN表示缺失值)。

内容的提问来源于stack exchange,提问作者Federico Vega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:10:39