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

多份月度税务Excel表格导入清洗与合并DataFrame问题求助

1. 排除红色高亮的冗余文本

要过滤Excel中红色高亮的冗余内容,需借助openpyxl读取单元格字体颜色属性,手动筛选有效行:

  • 先安装依赖:pip install openpyxl pandas
  • 核心逻辑:遍历工作表每行,检查单元格字体是否为红色(RGB值通常为FFFF0000,若匹配失败可自行打开Excel查看对应颜色的RGB值),仅保留无红色文本的行。

示例代码:

import openpyxl
import pandas as pd

def load_clean_excel(file_path, sheet_name='РК'):
    wb = openpyxl.load_workbook(file_path, data_only=True)
    ws = wb[sheet_name]
    valid_rows = []
    # 遍历所有行,同时获取单元格对象(用于判断格式)和单元格值
    for row_idx, row_values in enumerate(ws.iter_rows(values_only=True), start=1):
        has_red_text = False
        # 检查当前行的每个单元格格式
        for cell in ws[row_idx]:
            if cell.font.color and cell.font.color.rgb == 'FFFF0000':
                has_red_text = True
                break
        if not has_red_text:
            valid_rows.append(row_values)
    # 转成DataFrame,假设第一行是表头
    df = pd.DataFrame(valid_rows[1:], columns=valid_rows[0])
    return df

2. 解决合并时仅第一个表格正常、其余为NaN的问题

这个问题基本是因为不同表格列名不统一、数据起始行不一致,或者glob未正确匹配所有文件,按以下步骤修复:

步骤1:确保glob遍历到所有目标文件

检查路径写法,确保递归遍历到各年份文件夹下的所有月度文件:

from glob import glob

# 假设年份文件夹都在当前目录下,比如./2009/*.xlsx、./2010/*.xlsx
file_paths = glob('./**/*.xlsx', recursive=True)
# 打印确认文件数量是否符合预期(每年12个)
print(f"共找到{len(file_paths)}个文件")

步骤2:统一列结构后再合并

以第一个表格的列名为基准,对齐所有表格的列,缺失列补NaN,多余列直接丢弃:

# 加载第一个文件作为基准模板
base_df = load_clean_excel(file_paths[0])
standard_columns = base_df.columns.tolist()

all_dfs = [base_df]
for path in file_paths[1:]:
    temp_df = load_clean_excel(path)
    # 强制对齐列名
    temp_df = temp_df.reindex(columns=standard_columns)
    all_dfs.append(temp_df)

# 合并所有DataFrame
full_year_df = pd.concat(all_dfs, ignore_index=True)

额外排查点

  • 若部分表格的表头不在第一行,需调整load_clean_excel中valid_rows的索引,比如表头在第3行,就用valid_rows[2]作为列名,valid_rows[3:]作为数据。
  • 检查Excel文件是否存在隐藏行/列,导致读取异常,可手动打开文件确认数据结构。

内容的提问来源于stack exchange,提问作者Chingis Sauranbayev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:22:45