Python使用pandas对parquet多表执行SQL查询实现行转列输出std kw字段
处理方案
前置说明
如果已经完成Parquet三张表的读取拿到了对应DataFrame,可直接跳过读取步骤,从数据合并环节开始执行。
1. 读取Parquet表数据
import pandas as pd # 按需调整Parquet文件路径和筛选条件,读取三张表 publication_df = pd.read_parquet("你的parquet文件路径", filters=[("表名字段", "==", "publication")]) section_df = pd.read_parquet("你的parquet文件路径", filters=[("表名字段", "==", "section")]) alt_section_df = pd.read_parquet("你的parquet文件路径", filters=[("表名字段", "==", "alt section")])
如果三张表分别存为独立Parquet文件,直接把路径替换为对应表的文件路径即可,无需加filters参数。
2. 合并关键词数据并关联出版物编号
# 合并section和alt section表的关键词数据,需替换为你实际的关联外键、关键词字段名 all_kw_df = pd.concat([ section_df[["关联外键字段", "标准关键词字段"]], alt_section_df[["关联外键字段", "标准关键词字段"]] ], ignore_index=True) # 关联publication表拿到pub number,替换对应字段名 merge_df = all_kw_df.merge( publication_df[["关联外键字段", "pub number"]], on="关联外键字段", how="left" )
3. 转换为要求的宽表格式
# 给同一个pub number下的关键词排序编号 merge_df["kw序号"] = merge_df.groupby("pub number").cumcount() + 1 # 透视转换为宽表 result_df = merge_df.pivot( index="pub number", columns="kw序号", values="标准关键词字段" ).reset_index() # 重命名列符合要求 result_df.columns = ["pub number"] + [f"stdkw{i}" for i in result_df.columns[1:]] # 可选:空值填充为空字符串 result_df = result_df.fillna("")
输出样例
执行完成后即可得到符合要求的DataFrame,格式如下:
| pub number | stdkw1 | stdkw2 |
|---|---|---|
| 1078143 | T. | Art. |
如果同一个pub number对应N个关键词,会自动生成stdkw1到stdkwN共N个关键词列。
内容的提问来源于stack exchange,提问作者Nikita Ramesh Rao
相关产品推荐
相关产品推荐

