如何使用pandas将指定JSON按固定列透视转换为目标结构
核心实现逻辑
使用pandas内置的melt方法即可完成宽表转长表的需求,无需额外自定义复杂逻辑。
操作步骤
- 读取JSON文件为DataFrame,若JSON为嵌套结构可先使用
pd.json_normalize扁平化处理
import pandas as pd import json # 读取扁平结构JSON文件 df = pd.read_json("你的JSON文件路径.json") # 若为嵌套结构JSON,替换为以下代码展开所有嵌套字段 # with open("你的JSON文件路径.json", "r", encoding="utf-8") as f: # raw_data = json.load(f) # df = pd.json_normalize(raw_data)
- 定义固定保留列,执行结构转换
# 定义需要保留的固定字段 id_cols = ["eTask_ID", "Organization", "BidID", "Project"] # 宽表转长表 df_result = df.melt( id_vars=id_cols, var_name="Attribute", value_name="AttrValue" ) # 可选操作:去除AttrValue为空的无效记录 df_result = df_result.dropna(subset=["AttrValue"]).reset_index(drop=True)
效果示例
原始输入数据结构样例
| eTask_ID | Organization | BidID | Project | 合同金额 | 交付周期 |
|----------|--------------|-------|---------|----------|----------|
| T1001 | 城建集团 | B2301 | 地铁4号线| 12000000 | 180天 |
| T1002 | 建工集团 | B2302 | 跨海大桥 | 35000000 | 360天 |
转换后输出结构
| eTask_ID | Organization | BidID | Project | Attribute | AttrValue |
|----------|--------------|-------|---------|-----------|-----------|
| T1001 | 城建集团 | B2301 | 地铁4号线| 合同金额 | 12000000 |
| T1002 | 建工集团 | B2302 | 跨海大桥 | 合同金额 | 35000000 |
| T1001 | 城建集团 | B2301 | 地铁4号线| 交付周期 | 180天 |
| T1002 | 建工集团 | B2302 | 跨海大桥 | 交付周期 | 360天 |
内容的提问来源于stack exchange,提问作者Nitesh Joshi

