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

使用pd.concat合并DataFrame时原有值被覆盖为空,是否用错方法?

解决pd.concat合并后数据为空的问题

首先明确:pd.concat完全是你需求的正确选择——你要的是纵向追加两个DataFrame的行,concat就是干这个的,本身逻辑没问题。你遇到的df1的col2值为空,大概率是合并前的DataFrame本身有问题,或者合并时的细节没注意到。

我帮你梳理几个最可能的原因和解决办法:

1. 检查两个DataFrame的列名是否完全一致

Pandas的列名是大小写敏感的!比如如果你的df2的列名是Col2(大写C),而df1是col2(小写),合并后会生成两列:col2和Col2。这时候df1的Col2列自然是空值,df2的col2列也是空值,看起来就像原有数据被清空了。

解决办法:合并前统一列名,比如:

df2.columns = df1.columns  # 让df2和df1列名完全一致
df = pd.concat([df2, df1], sort=False, ignore_index=True)

2. 检查原DataFrame的col2列是否本身就有缺失

有可能你创建df1的时候,col2列的赋值就出了问题(比如误写了空列表、语法错误)。先单独打印两个DataFrame看看:

print("df1的col2列:")
print(df1['col2'])
print("\ndf2的col2列:")
print(df2['col2'])

如果df1的col2本身就有NaN,那合并后肯定会显示空值。

3. 检查两列的数据类型是否匹配

如果df1的col2是整数类型,而df2的col2是字符串或其他不兼容类型,极端情况下可能导致数据显示异常(不过一般concat会自动转成兼容类型,不会直接清空)。可以用下面的代码查看类型:

print(df1.dtypes)
print(df2.dtypes)

如果类型不一致,可以统一转换:

df2['col2'] = df2['col2'].astype(int)  # 把df2的col2转成整数

正确的示例代码

我按照你给出的数据写了正确的创建和合并代码,运行后完全正常:

import pandas as pd

# 创建正确的df1
df1 = pd.DataFrame({
    'col1': ['house1', 'house2', 'house3'],
    'col2': [300, 450, 750]
})

# 创建正确的df2
df2 = pd.DataFrame({
    'col1': ['house4'],
    'col2': [600]
})

# 合并
df = pd.concat([df2, df1], sort=False, ignore_index=True)
print(df)

输出结果:

col1  col2
0  house4   600
1  house1   300
2  house2   450
3  house3   750

你可以对照上面的步骤排查自己的代码,应该就能找到问题所在了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:06