Python多DataFrame合并异常:列数不符问题求助
解决方案:统一列名与列结构后合并
合并后列数异常的核心原因是不同页的DataFrame列名不匹配(比如Tabula识别时列名带空格、大小写差异,或多余列的列名随机),pd.concat会保留所有不同列名的列,导致列数膨胀。以下是具体解决步骤:
1. 确定标准列名
先从正常的10列DataFrame中提取基准列名:
import pandas as pd import tabula # 读取PDF所有页的表格 df_list = tabula.read_pdf("file/path", pages='all') # 找到第一个10列的表格,提取标准列名 standard_columns = None for df_page in df_list: if df_page.shape[1] == 10: standard_columns = df_page.columns.tolist() break
2. 统一所有表格的列结构
遍历每个表格,先处理多余列,再强制对齐列名:
processed_dfs = [] expected_col_count = 10 for df_page in df_list: # 处理列数过多的情况:保留前10列(因格式一致,多余列应为最后一列) if df_page.shape[1] > expected_col_count: df_page = df_page.iloc[:, :expected_col_count] # 强制设置列名为标准列名,确保完全匹配 df_page.columns = standard_columns processed_dfs.append(df_page)
3. 合并处理后的表格
此时所有表格的列数、列名完全一致,直接合并即可:
combined_df = pd.concat(processed_dfs, ignore_index=True)
可选:排查列名差异
如果想确认列名具体差异,可打印所有页的列名对比:
for idx, df_page in enumerate(df_list): print(f"第{idx+1}页列名:{df_page.columns.tolist()}")
若发现列名存在空格、大小写问题,可提前统一格式化:
# 标准列名格式化:去空格、转小写 standard_columns = [col.strip().lower() for col in standard_columns] # 处理每个表格的列名 df_page.columns = [col.strip().lower() for col in df_page.columns]
内容的提问来源于stack exchange,提问作者William P
相关产品推荐
相关产品推荐

