如何处理Tabula提取的带多级表头PDF表格,生成目标结构化数据?
解决方案
步骤说明
- 提取新列名:从原始DataFrame的第一行获取子表头,作为目标格式的列名。
- 移除表头行:删除包含子表头的第一行,避免干扰后续数据处理。
- 填充分组标签:将分组标识(A、B)向下填充到其对应的所有数据行,确保每行都关联正确的分组。
- 过滤无效行:移除仅包含分组标签的行(即
unnanmed1为NaN的行),保留有效数据行。 - 重构DataFrame:将数据映射到目标格式的列结构中,完成转换。
完整代码
import pandas as pd import numpy as np NaN = np.nan df = pd.DataFrame({ 'Header': ['subheader1', 'A', 1, 2, 3, 'B', 4, 5, 6], 'unnanmed1': ['subheader2', NaN, 'aaa', 'ccc', 'eee', NaN, 'ggg', 'iii', 'kkk'], 'unnamed2': ['subheader3', NaN, 'bbb', 'ddd', 'fff', NaN, 'hhh', 'jjj', 'lll'], }) # 提取目标列名 new_columns = ['Header'] + df.iloc[0].tolist() # 删除第一行并重置索引 df = df.drop(index=0).reset_index(drop=True) # 填充分组标签到对应行 df['Group'] = df['Header'].where(df['unnanmed1'].isna()).ffill() # 过滤掉仅含分组标签的行 filtered_df = df[~df['unnanmed1'].isna()].reset_index(drop=True) # 构建符合目标格式的DataFrame final_df = pd.DataFrame({ 'Header': filtered_df['Group'], 'subheader1': filtered_df['Header'], 'subheader2': filtered_df['unnanmed1'], 'subheader3': filtered_df['unnamed2'] }) print(final_df)
输出结果
Header subheader1 subheader2 subheader3 0 A 1 aaa bbb 1 A 2 ccc ddd 2 A 3 eee fff 3 B 4 ggg hhh 4 B 5 iii jjj 5 B 6 kkk lll
内容的提问来源于stack exchange,提问作者daniell251
相关产品推荐
相关产品推荐

