Jupyter Notebook处理含多工作表多级表头的Excel数据集求助
数据集清洗整理可行方案
你之前的两种尝试分别存在两个核心问题:一是合并多工作表时没有保留每个工作表对应的时间维度,二是没有对行中的LGA/Region分类标记,以下是完整可运行的整理方案,最终输出整洁数据格式,适配后续所有分析需求。
1. 核心处理逻辑
最终目标输出每行对应统计时间+区域类型+区域名称+指标值的整洁结构,方便后续做时间趋势、区域对比、指标拆分等分析。
- 每个工作表对应一个统计时间点,读取时同步保留时间维度
- 新增
area_type列区分每行是LGA还是Region - 多级表头可选保留或扁平化合并为单列
2. 完整实现代码
import pandas as pd import numpy as np # 1. 读取全量工作表,保留三级表头结构 file_path = "C:\\Users\\ASUS\\Downloads\\dataset.xlsx" # sheet_name=None 会返回字典:键为工作表名,值为对应工作表DataFrame df_dict = pd.read_excel(file_path, header=[0,1,2], sheet_name=None) clean_df_list = [] for sheet_name, df in df_dict.items(): # 2. 补充时间维度:工作表名一般对应统计时间,可根据你实际工作表名格式调整转时间逻辑 # 示例:如果工作表名是'1999-06'格式,直接转datetime即可 df['stat_time'] = pd.to_datetime(sheet_name) # 3. 处理行属性:区分LGA和Region # 把行名转为普通列 df = df.reset_index(names='area_name') # 新增区域类型列:根据行名规则匹配,比如LGA名称带数字编码,可根据实际规则调整匹配条件 df['area_type'] = np.where(df['area_name'].str.contains('\d', na=False), 'LGA', 'Region') # 4. 可选:扁平化多级表头,把三级表头合并为下划线连接的单列,不需要可跳过此步 df.columns = ['_'.join(col).strip() if isinstance(col, tuple) else col for col in df.columns] clean_df_list.append(df) # 拼接所有工作表数据得到最终宽表 final_wide_df = pd.concat(clean_df_list, axis=0, ignore_index=True)
3. 可选优化适配分析需求
3.1 宽表转长表(更适配多维度分析)
如果需要按指标维度做聚合、筛选,可以转为长表结构:
final_long_df = final_wide_df.melt( id_vars=['stat_time', 'area_type', 'area_name'], var_name='indicator', value_name='cumulative_value' )
3.2 累计值转单期值
因为你的数据是累计值,需要计算单期新增值的话可以按区域分组后做差:
# 先按区域、时间排序 final_wide_df = final_wide_df.sort_values(['area_type', 'area_name', 'stat_time']) # 示例计算「新建住宅_销售套数_总计」的单期值,可替换为你需要的指标列 final_wide_df['new_house_sales_period'] = final_wide_df.groupby(['area_type', 'area_name'])['新建住宅_销售套数_总计'].diff()
4. 验证结果
运行final_wide_df.head()或final_long_df.head()即可查看整理后的数据格式,后续可直接用于分组统计、可视化、建模等分析操作。
内容的提问来源于stack exchange,提问作者Udan
相关产品推荐
相关产品推荐

