You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:47:39