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

如何用Pandas拆分单工作表多Excel表格并分别填充缺失值?

拆分Excel工作表中的多表格并分别填充缺失值

嘿,我来帮你搞定这个问题!你的需求是拆分同一张工作表里的多个表格(比如表1、表2),然后针对每个表格单独填充缺失值对吧?咱一步步来:

第一步:拆分工作表中的多个表格

Excel里的多表格一般是用空行或者重复表头来分隔的,首先得找到这些分隔点,把大的DataFrame拆成多个独立的表格DataFrame。

举个空行分隔的例子,咱们先定位分隔点再拆分:

import pandas as pd
import numpy as np

# 先读取整个工作表,不提前跳过行(留着找分隔点)
full_data = pd.read_excel('filename', sheet_name=0)

# 找出所有全为空的行的索引
empty_rows = full_data[full_data.isnull().all(axis=1)].index.tolist()
# 加上首尾索引,方便完整拆分整个数据集
split_points = [0] + empty_rows + [len(full_data)]

# 拆分出各个独立表格
tables = []
for i in range(len(split_points)-1):
    # 取出两个拆分点之间的行,去掉首尾空行
    table = full_data.iloc[split_points[i]:split_points[i+1]]
    table = table.dropna(how='all').reset_index(drop=True)
    # 把第一行设为表头,然后去掉原表头行
    table.columns = table.iloc[0]
    table = table[1:].reset_index(drop=True)
    # 只保留非空的有效表格
    if not table.empty:
        tables.append(table)

这样tables列表里就存着每个单独表格的DataFrame啦!如果你的表格是用重复表头(比如每个表格都以"S.No."开头)分隔的,逻辑类似——找到表头出现的索引作为拆分点就行。

第二步:针对每个表格单独填充缺失值

你原来的代码有个小问题:循环里反复调用fillna(df_selected.mean())会重复填充,其实对每个表格的数值列计算均值后填充一次就够。咱们写个小函数来处理单个表格,再遍历所有拆分后的表格:

def fill_missing_values(table):
    # 只对数值型列用均值填充缺失值
    numeric_cols = table.select_dtypes(include=[np.number]).columns
    table[numeric_cols] = table[numeric_cols].fillna(table[numeric_cols].mean())
    return table

# 批量处理所有拆分后的表格
processed_tables = [fill_missing_values(tbl) for tbl in tables]

# 查看第一个处理后的表格示例
print(processed_tables[0])

# 可选:把处理后的表格保存回新Excel文件
with pd.ExcelWriter('processed_filename.xlsx') as writer:
    for idx, tbl in enumerate(processed_tables):
        tbl.to_excel(writer, sheet_name=f'表{idx+1}', index=False)

适配你原有的列筛选需求

如果你只需要提取特定列(比如['S.No.', 'YEAR', 'JUNE']),可以在拆分后对每个表格做列筛选再处理:

FORMAT = ['S.No.', 'YEAR', 'JUNE']
processed_tables = []
for tbl in tables:
    # 先确认表格包含目标列,再筛选
    if all(col in tbl.columns for col in FORMAT):
        df_selected = tbl[FORMAT]
        # 填充缺失值
        numeric_cols = df_selected.select_dtypes(include=[np.number]).columns
        df_selected[numeric_cols] = df_selected[numeric_cols].fillna(df_selected[numeric_cols].mean())
        processed_tables.append(df_selected)

内容的提问来源于stack exchange,提问作者Binod Bhandary

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:54:14