如何无需拼接操作展开DataFrame中嵌套JSON列?
如何展开DataFrame中嵌套JSON的'bultos'列?
问题背景
已通过pd.json_normalize处理JSON数据生成DataFrame,但其中的bultos列仍为嵌套JSON结构,尝试再次全局归一化未成功。需求是按行位置自动新增列展开该嵌套JSON,无需依赖索引匹配。
已执行的预处理代码
response1 = requests.get(url1, params=params1, headers=headertoken) textresponse1 = response1.text if "El contrato enviado no tiene envios registrados." in textresponse1: continue textresponse1 = json.loads(response1.text) response1_df = pd.json_normalize(textresponse1['envios']) enviosdf = pd.concat([enviosdf,response1_df])
当前'bultos'列数据示例
0 {'kilos': 0.0025, 'IdDeProducto': 'ysyHhBHttHd... 1 {'kilos': 0.0025, 'IdDeProducto': 'QNEOqaNXtsi... 2 {'kilos': 0.0025, 'IdDeProducto': 'V7b3D7xaSur...
解决方案
直接提取bultos列单独做JSON归一化,再与原DataFrame横向拼接即可,默认按行位置对齐,无需索引匹配:
# 单独展开bultos列的嵌套JSON bultos_expanded = pd.json_normalize(enviosdf['bultos']) # 移除原DataFrame中的bultos列,再与展开后的结果横向拼接 enviosdf = pd.concat([enviosdf.drop('bultos', axis=1), bultos_expanded], axis=1)
说明
- 此方法会将
bultos中的键(如kilos、IdDeProducto)转为新列,每一行的嵌套数据会精准对应到原DataFrame的同一行。 - 之前尝试全局归一化失败,是因为
pd.json_normalize默认处理的是整个DataFrame的顶层结构,无法直接识别嵌套在列中的JSON,单独提取列处理即可解决。
内容的提问来源于stack exchange,提问作者Matias Tiberio
相关产品推荐
相关产品推荐

