You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

json_normalize无法展平字典列表类型sellers.price_data列解决方案咨询

处理代码

你在现有代码生成flat_dct变量后,追加以下代码即可完成sellers.price_data列的完全展平:

# 拆分price_data列的列表结构,每个字典单独成行
flat_dct = flat_dct.explode('sellers.price_data', ignore_index=True)
# 解析字典结构为独立的date、price列
price_cols = pd.json_normalize(flat_dct['sellers.price_data'])
# 合并解析结果到原表,删除原嵌套列
final_df = pd.concat([flat_dct.drop(columns=['sellers.price_data']), price_cols], axis=1)

# 验证输出结果
print(tabulate(final_df.head()))

如果你的sellers.price_data列每个列表始终只有1个字典(和你示例数据一致),可以用简化写法:

# 单元素列表简化处理
flat_dct[['date', 'price']] = flat_dct['sellers.price_data'].apply(lambda x: pd.Series(x[0]))
final_df = flat_dct.drop(columns=['sellers.price_data'])

完整修改后代码

import pandas as pd
import requests
from tabulate import tabulate

api_url = 'https://mschannellogin.com/Api/produc_matrix_tier_1?api_key=x'
json_text = requests.get(api_url).json()

# 读取基础数据
data_df = pd.DataFrame(json_text['data'])
mod_df = data_df.loc[:,['sku', 'product_name', 'map_price', 'sellers']]

# 展开sellers列的列表结构
mod_df = mod_df.explode('sellers', ignore_index=True)
# 第一次normalize解析sellers字段
flat_dct = pd.json_normalize(mod_df.to_dict(orient='records'))

# 处理sellers.price_data列
flat_dct = flat_dct.explode('sellers.price_data', ignore_index=True)
price_cols = pd.json_normalize(flat_dct['sellers.price_data'])
final_df = pd.concat([flat_dct.drop(columns=['sellers.price_data']), price_cols], axis=1)

# 输出验证
print(tabulate(final_df.head()))

得到的final_df已经完全展开所有嵌套结构,每一行对应一条sku+卖家+日期的价格记录,可直接导入PowerBI使用。


内容的提问来源于stack exchange,提问作者amcgill2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:15:04