Python使用concat和append拼接pandas数据集出现shape错误如何解决
问题根因
- 列数异常:两个DataFrame的列名不完全匹配,
pd.concat()和append()默认按列名对齐合并,列名不同的列会单独生成新列,最终列数为两个df列名的并集,因此从188涨到309。 - 行数校验:4045+10505=14550,你预期的14750属于计算偏差,若确认实际应该有14750行,可检查csv读取阶段的参数配置。
解决代码
- 首先保证两个DataFrame列名一致
如果是读取csv时默认把第一行数据识别为表头导致列名不一致,读取时增加header=None参数,统一生成数值列名:
import pandas as pd # 读取时指定无表头,自动生成0~187的统一列名 df1 = pd.read_csv('ptbdb_normal.csv', header=None) df2 = pd.read_csv('ptbdb_abnormal.csv', header=None)
如果已经读取完成,直接手动对齐列名即可:
# 把df2的列名修改为和df1完全一致 df2.columns = df1.columns
- 按行拼接数据集
推荐使用pd.concat()实现(append方法在pandas 2.0及以上版本已正式弃用),拼接时添加ignore_index=True重置行索引,避免原索引重复带来的后续问题:
df_con = pd.concat([df1, df2], ignore_index=True) # 验证输出shape print(df_con.shape)
拼接完成后输出的shape应为(14550, 188)。
行数异常排查方案
如果输出行数和你的预期不符,可按以下方向排查:
- 检查
pd.read_csv()的on_bad_lines参数,若设置为skip会自动丢弃格式错误的行,可修改为on_bad_lines='warn'查看是否有异常行被丢弃 - 确认是否配置了
skiprows、nrows等限制读取行数的参数 - 直接打开原始csv文件统计行数,确认数据源本身的行数是否符合预期
内容的提问来源于stack exchange,提问作者yras8
相关产品推荐
相关产品推荐

