如何在无列名情况下合并Pandas DataFrame?
无列名DataFrame与带列名DataFrame的正确合并方法
问题场景
用户创建了两个Pandas DataFrame:
import pandas as pd df = pd.DataFrame({'col1': [1], 'col2': [4]}) df1 = pd.DataFrame([[5,5]])
直接调用pd.concat([df, df1])合并后,出现多余列,且原int64类型的数据自动转为float64:
col1 col2 0 1 0 1.0 4.0 NaN NaN 0 NaN NaN 5.0 5.0
用户期望得到的合并结果为:
col1 col2 0 1 4 0 5 5
解决方案
问题根源是df1使用默认列名(0、1),和df的列名(col1、col2)不匹配,pd.concat默认按列名对齐,因此产生不匹配的列和缺失值(缺失值会让整数类型转为浮点型)。以下是两种可行的解决方法:
方法一:给无列名DataFrame指定匹配列名
在创建df1时直接复用df的列名,或者事后修改列名,再执行合并:
# 方式1:创建df1时指定列名 df1 = pd.DataFrame([[5,5]], columns=df.columns) # 方式2:事后修改df1的列名 # df1.columns = df.columns # 执行合并,可选ignore_index=True重置索引避免重复 result = pd.concat([df, df1], ignore_index=True)
方法二:合并时重构无列名DataFrame的结构
直接提取df1的数值,重新构造和df列名一致的DataFrame后合并:
result = pd.concat([df, pd.DataFrame(df1.values, columns=df.columns)], ignore_index=True)
效果验证
执行上述任意方法后,得到的结果均符合预期,且数据类型保持为int64:
col1 col2 0 1 4 1 5 5
内容的提问来源于stack exchange,提问作者s510
相关产品推荐
相关产品推荐

