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
相关产品推荐
相关产品推荐

