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

Pandas向DataFrame添加行异常:使用append与concat未获得预期结果

解决Pandas合并带表头与无表头DataFrame的问题

看起来你遇到的核心问题是从无表头CSV读取的DataFrame没有和原有DataFrame匹配的列名,直接用append或concat时,因为列名不对应,导致合并结果不符合预期。我来一步步帮你解决:

1. 先复现你的场景

首先模拟你现有的两个DataFrame:

import pandas as pd

# 原有带表头的DataFrame
df_existing = pd.DataFrame({'ID': [44, 31], 'age': [23, 25]})
print("原有DataFrame:")
print(df_existing)

输出:

原有DataFrame:
   ID  age
0  44   23
1  31   25

如果你直接读取无表头CSV而不指定列名,Pandas会自动用0、1作为列名:

# 模拟读取无表头CSV(实际用 pd.read_csv('your_file.csv', header=None))
df_new = pd.DataFrame([[33, 55], [22, 23], [29, 22]])
print("\n无表头读取的有点问题的DataFrame:")
print(df_new)

输出:

无表头读取的有点问题的DataFrame:
    0   1
0  33  55
1  22  23
2  29  22

这时候直接合并的话,因为列名不匹配,Pandas会保留所有列,结果会出现NaN或者结构混乱,这就是你遇到的情况。

2. 正确的解决方法

方法一:读取CSV时直接指定列名(推荐)

在读取无表头CSV的时候,通过names参数指定和原有DataFrame一致的列名:

# 读取无表头CSV并指定列名
df_new = pd.read_csv('your_file.csv', names=['ID', 'age'])

# 使用concat合并(Pandas官方推荐,append已被弃用)
combined_df = pd.concat([df_existing, df_new], ignore_index=True)
print("\n合并后的最终DataFrame:")
print(combined_df)

输出就是你想要的结果:

合并后的最终DataFrame:
   ID  age
0  44   23
1  31   25
2  33   55
3  22   23
4  29   22

方法二:给已读取的无表头DataFrame补列名

如果已经读取了无表头的DataFrame,也可以手动设置列名后再合并:

# 给无表头DataFrame设置列名
df_new.columns = ['ID', 'age']

# 合并(如果坚持用append,注意Pandas 2.0+已弃用该方法)
# combined_df = df_existing.append(df_new, ignore_index=True)
combined_df = pd.concat([df_existing, df_new], ignore_index=True)

关键提醒

  • 合并Pandas DataFrame的核心前提是两个DataFrame的列名完全匹配,否则会出现列错位或NaN值。
  • append方法在Pandas 2.0及以上版本已经被弃用,官方推荐使用pd.concat()来替代,功能更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:02:47