使用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
相关产品推荐
相关产品推荐

