如何正确使用Pandas拼接DataFrame?拼接列异常问题求助
问题原因与解决方案
问题根源
将p3存入CSV再读取后,p3的列名会被自动转为字符串类型(如'0'、'1'),而你创建的p4列名是默认的整数类型(0)。pd.concat()会严格按列名(包括类型)对齐,类型不匹配的列名会被判定为不同列,导致p4被当作新列拼接,而非追加到p3的行下方。
解决方案
以下是几种可行的修复方式:
方式1:读取CSV时统一列名类型
读取p3后,将列名转回整数,和p4的列名类型保持一致:
import pandas as pd p1 = pd.DataFrame([['john','Kim'],[9,3]]) p2 = pd.DataFrame([['Alice'],[4]]) p1.index = ['A',''] p2.index = ['B', ''] p3 = pd.concat([p1,p2]).fillna('') p3.to_csv('test.csv', index = True) # 修改读取逻辑,将列名转为整数 p3 = pd.read_csv('test.csv',index_col=0) p3.columns = p3.columns.astype(int) # 关键:统一列名类型 p4 = pd.DataFrame([['George'],[7]]) p4.index=['K',''] p5 = pd.concat([p3,p4]).fillna('') # 填充空值保持格式一致 print(p5)
方式2:创建p4时匹配p3的列名
直接让p4的列名和列数与p3完全一致:
# 读取p3后 p3 = pd.read_csv('test.csv',index_col=0) # 创建p4时指定和p3相同的列名,空列填充'' p4 = pd.DataFrame([['George',''],[7,'']], columns=p3.columns) p4.index=['K',''] p5 = pd.concat([p3,p4])
方式3:强制忽略列名对齐(谨慎使用)
如果确定p3和p4的列顺序完全对应,可以用ignore_index强制行拼接,但此方法不推荐用于列数或顺序可能变化的场景:
p5 = pd.concat([p3,p4], ignore_index=True, axis=0).fillna('')
内容的提问来源于stack exchange,提问作者Rafi Ullah
相关产品推荐
相关产品推荐

