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

求助:Pandas合并多DataFrame出现NaN,如何得到指定格式结果

解决DataFrame合并后出现对角线NaN的问题

问题原因

出现对角线分布的NaN,通常是以下两种情况:

  • 各DataFrame的列名存在隐性差异(比如列名前后有空格、大小写不一致),导致concat时自动扩充列,不同列名的位置填充NaN;
  • 未重置索引,且各DataFrame的索引重复,视觉上呈现类似对角线的分布效果。

解决方案

1. 先统一列名(关键步骤)

先检查每一个DataFrame的列名是否完全一致:

# 遍历打印所有df的列名,排查差异
for idx, df in enumerate([df1, df2, df3, df4, df5, df6, df7], 1):
    print(f"df{idx} 列名: {list(df.columns)}")

如果发现列名有空格、大小写不一致等问题,统一修正:

# 去除列名前后空格并转为小写(可根据实际调整规则)
for df in [df1, df2, df3, df4, df5, df6, df7]:
    df.columns = df.columns.str.strip().str.lower()

2. 合并并提取目标列

列名统一后,重新合并并只保留amount列,同时重置索引避免重复:

# 方案一:先合并所有df,再提取amount列
frames = [df1, df2, df3, df4, df5, df6, df7]
result = pd.concat(frames, ignore_index=True)[["amount"]]

# 方案二:合并前只提取每个df的amount列,更高效
frames = [df["amount"] for df in [df1, df2, df3, df4, df5, df6, df7]]
result = pd.concat(frames, ignore_index=True).to_frame(name="amount")

3. 额外排查:是否存在表头重复导入的情况

如果你的DataFrame是从文件读取的,可能误把表头行当成了数据行(比如每个文件都有name sub amount这行),需要先清洗:

for df in [df1, df2, df3, df4, df5, df6, df7]:
    # 过滤掉amount列无法转为数字的行(即表头行)
    df = df[pd.to_numeric(df["amount"], errors="coerce").notna()]
    df.reset_index(drop=True, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:15:17