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

Pandas展平DataFrame列并与原表拼接时结果异常及缺失问题

解决DataFrame嵌套字典列展平拼接异常问题

问题核心

你用pd.json_normalize()处理单字典元素的列时,字典内的列表值会干扰展平后的行对齐逻辑——哪怕你手动重置过索引,pd.concat()的ignore_index=True参数反而会破坏原有的行映射关系,导致拼接结果出现错位或缺失。

修复方案

方案1:用apply(pd.Series)替代pd.json_normalize()展平

针对列中每个元素是单个字典的场景,apply(pd.Series)能稳定将字典键转为列,且自动保留原行的索引对齐:

# 假设原DataFrame名为df,目标嵌套列名为nested_data
flatten_df = df['nested_data'].apply(pd.Series)
# 保留原索引拼接,避免错位
result_df = pd.concat([df, flatten_df], axis=1)

方案2:预处理字典内的列表值(可选)

如果字典里的列表仅含单个元素(比如account和ip的列表长度都是1),可以先把列表拆为单个值,避免后续数据异常:

def parse_dict(d):
    return {k: v[0] if len(v) > 0 else None for k, v in d.items()}

# 先处理列表值,再展平列
flatten_df = df['nested_data'].apply(parse_dict).apply(pd.Series)
result_df = pd.concat([df, flatten_df], axis=1)

方案3:强制对齐索引后用pd.json_normalize()拼接

若坚持用pd.json_normalize(),需先让展平后的DataFrame索引与原DataFrame完全一致,再关闭ignore_index:

flatten_df = pd.json_normalize(df['nested_data'])
# 强制对齐索引
flatten_df.index = df.index
result_df = pd.concat([df, flatten_df], axis=1)

验证拼接正确性

拼接后可通过以下代码确认行对应关系:

# 检查原列的ip值与展平后的ip列是否完全匹配
assert all(df['nested_data'].apply(lambda x: x['ip'][0]) == result_df['ip'])

内容的提问来源于stack exchange,提问作者Swarup Pattnaik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:54:57