如何合并Tabula提取PDF表格得到的DataFrame多行内容
解决Tabula提取PDF表格后的作物建议合并问题
这种从PDF里提取表格后遇到的分组合并需求太常见了,用pandas就能轻松搞定,我给你一步步说明操作方法:
核心思路
- 先把
Crop(Varieties)列的缺失值(NaN)用前一个非空的作物名称填充,确保同一作物的所有行都有对应的作物标签 - 按填充后的作物列分组,把同属一个作物的
Crop Specific Advisory内容合并成单行
具体代码实现
假设你已经用Tabula把PDF表格转换成了pandas的DataFrame(命名为df),执行以下代码:
import pandas as pd # 步骤1:填充缺失的作物名称,用前一个非空值向下填充 df['Crop(Varieties)'] = df['Crop(Varieties)'].ffill() # 步骤2:按作物分组,合并建议内容(这里用换行符分隔,可根据需求换成空格或其他符号) merged_df = df.groupby('Crop(Varieties)')['Crop Specific Advisory'].agg( lambda x: '\n'.join([item.strip() for item in x.dropna()]) ).reset_index()
代码细节说明
ffill():全称是forward fill,会自动把上一个非空的作物名称填充到下面所有的NaN行,这样同一作物的所有行就都有了统一的标识groupby('Crop(Varieties)'):按作物名称分组,把属于同一作物的所有行归为一组agg(lambda x: ...):对每组的Crop Specific Advisory列做聚合操作:x.dropna():先过滤掉该组中为空的建议行(避免合并空字符串)item.strip():去掉每个建议行前后的多余空格或换行,让合并后的内容更整洁'\n'.join(...):用换行符把所有建议行连接起来,如果你想要用空格分隔,换成' '.join(...)即可
额外优化建议
如果你的原始数据里有重复的建议内容,可以在合并前先去重:
merged_df = df.groupby('Crop(Varieties)')['Crop Specific Advisory'].agg( lambda x: '\n'.join([item.strip() for item in x.dropna().unique()]) ).reset_index()
内容的提问来源于stack exchange,提问作者anny
相关产品推荐
相关产品推荐

