如何将报表格式的Excel数据导入pandas DataFrame
处理带复合表头的表格转Pandas DataFrame
根据你提供的表格结构(带合并单元格、多级表头的律所数据),可以按照以下步骤处理,完全用Python完成转换:
1. 读取原始数据
假设你下载的是Excel文件,读取时要指定表头为前两行(对应截图里的大类别+子字段的复合表头):
import pandas as pd # 替换为你的文件路径 df_raw = pd.read_excel("nalp_data.xlsx", header=[0, 1])
2. 合并复合表头
把多级表头合并为单级,避免后续操作混淆:
# 用下划线连接大类别和子字段,生成清晰的列名 df_raw.columns = ['_'.join(col).strip() for col in df_raw.columns.values]
比如原表头Firm Information下的Name会变成FirmInformation_Name。
3. 填充跨行空值
因为合并单元格导致同一律所的标识字段(如名称)跨行出现空值,需要向下填充:
# 填充所有空值,确保同一律所的信息归属统一标识 df_filled = df_raw.ffill()
4. 用stack/unstack重塑数据
根据你的需求选择合适的重塑方式:
方式1:转成窄表(每条记录为一个字段的键值对)
如果需要把宽表拆成"律所-字段-值"的结构:
# 以律所名称为索引,stack展开所有字段 df_stacked = df_filled.set_index('FirmInformation_Name').stack().reset_index() df_stacked.columns = ['Firm_Name', 'Field', 'Value']
方式2:保留宽表结构,清理重复行
如果要得到每条律所的完整单行记录:
# 删除重复的律所行,保留第一条完整记录 df_final = df_filled.drop_duplicates(subset='FirmInformation_Name', keep='first')
5. 可选:后续数据清洗
- 删除完全为空的列/行:
df_final = df_final.dropna(axis=1, how='all') - 格式化字符串字段(如地址、电话):可以用
str.strip()、str.split()等方法拆分处理
内容的提问来源于stack exchange,提问作者As3adTintin
相关产品推荐
相关产品推荐

