如何用pd.json_normalize提取指定JSON数据生成目标DataFrame
正确实现方法
你之前的代码错误在于对record_path参数的理解有误——它的作用是指定需要扁平化的嵌套数组路径,而不是直接罗列要提取的字段。针对你的需求,正确的用法如下:
完整代码
import pandas as pd lst_object = [ {'id': 'TC2-FFA', 'shortCode': 'TC2-FFA', 'dataSet': {'datumPrecision': 2, 'id': 'TC2_37', 'shortCode': 'TC2_37', 'shortDescription': 'Clean Continent to US Atlantic coast', 'displayGroup': 'BCTI', 'datumUnit': 'Worldscale', 'data': [{'value': 156.11, 'date': '2023-03-06'}], 'apiIdentifier': 'RDSX9KRCHQI9TVGID5O7XQGBP1KKBZ0F'}, 'datumUnit': 'WS', 'datumPrecision': 3, 'projectionStartOn': '2005-01-04T00:00:00', 'projectionEndOn': '2023-03-06T00:00:00', 'apiIdentifier': 'RPSBTGHKN64SV91SV9R3492RCH33D2OH'}, {'id': 'TC2$-FFA', 'shortCode': 'TC2$-FFA', 'dataSet': {'datumPrecision': 2, 'id': 'TC2_37', 'shortCode': 'TC2_37', 'shortDescription': 'Clean Continent to US Atlantic coast', 'displayGroup': 'BCTI', 'datumUnit': 'Worldscale', 'data': [{'value': 156.11, 'date': '2023-03-06'}], 'apiIdentifier': 'RDSX9KRCHQI9TVGID5O7XQGBP1KKBZ0F'}, 'datumUnit': '$/mt', 'datumPrecision': 3, 'projectionStartOn': '2010-05-10T00:00:00', 'projectionEndOn': '2023-03-06T00:00:00', 'apiIdentifier': 'RPSH1H9454DYUE7G8CLHVLFPJZ3BVM77'} ] # 核心操作:用record_path展开嵌套的data数组,用meta保留外层shortCode df = pd.json_normalize(lst_object, record_path=['dataSet', 'data'], meta=['shortCode']) # 重命名列以匹配目标结构 df = df.rename(columns={'value': 'data.value', 'date': 'data.date'}) # 调整列顺序,和目标结构完全对齐 df = df[['shortCode', 'data.value', 'data.date']] print(df)
输出结果
shortCode data.value data.date 0 TC2-FFA 156.11 2023-03-06 1 TC2$-FFA 156.11 2023-03-06
内容的提问来源于stack exchange,提问作者neutralname
相关产品推荐
相关产品推荐

