【问题标题】:Pandas python how to transform nested JSON object into rows and columnsPandas python如何将嵌套的JSON对象转换为行和列
【发布时间】:2020-04-24 07:24:24
【问题描述】:

我有一个包含数千个名为“businesses”的 json 对象的 json 字典,其中包含数组中的以下嵌套 JSON。每个“企业”都有一个返回的“唯一请求 ID”。有时,一个请求可能会返回多个业务。

{'principals': [{'addresses': [{'city': 'DENVILLE', 'state': 'NJ', 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}, 'zip': '07834', 'address': '87 JILLOW AVE'}], 'titles': ['SECRETARY'], 'names': [{'suffix': None, 'firstName': 'JAMES', 'middleName': None, 'lastName': 'VU', 'salutation': None, 'pids': [], 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}}, {'suffix': None, 'firstName': 'LAURA', 'middleName': 'A', 'lastName': 'VU', 'salutation': None, 'pids': [], 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}}], 'pids': ['1000320219031584'], 'lastSeenDate': '2008-01-01T00:00:00.000Z', 'firstSeenDate': None}, {'addresses': [{'city': 'LAKE HAVASU CITY', 'state': 'AZ', 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}, 'zip': '86403', 'address': '1887 WILLOW AVE'}], 'titles': ['MANAGER'], 'names': [{'suffix': None, 'firstName': 'JASON', 'middleName': None, 'lastName': 'ROBERTS', 'salutation': None, 'pids': [], 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}}], 'pids': ['1000320147115755'], 'lastSeenDate': '1999-07-28T00:00:00.000Z', 'firstSeenDate': None}], 'tradeNames': ['DORI LAURA DVM'], 'addresses': [{'city': 'HAVASU CITY', 'state': 'NY', 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}, 'zip': '16403', 'address': '299 PASEO DEL SOL'}], 'searchType': 'Name+Address', 'contacts': [], 'phones': ['19284532022'], 'registrationDate': '1999-07-29T00:00:00.000Z', 'websites': ['WWW.DORIVET.COM'], 'eid': '39281818', 'sources': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 5}, 'dataSource': 'iData', 'names': ['DORI VETERINARY CENTER INC', 'DORI-ROBERTS INC'], 'registrationAddress': {'city': 'PHOENIX', 'state': 'AZ', 'metadata': {'sources': [], 'lastSeen': None, 'firstSeen': None, 'sourceCount': 0}, 'zip': '85007', 'address': '1200 W WASHINGTON'}, 'duns': ['042512348'], 'relatedBusinesses': [], 'industryNames': ['VETERINARIAN, ANIMAL SPECIALTIES'], 'officeAddress': None, 'ein': ['77711133333']}

我希望 DataFrame 中的最终 CSV 看起来像这样......所有扁平列都在右侧。

RequestId BusinessName                 BusinessAddress .... 
ABCD      DORI VETERINARY CENTER INC.  87 JILLOW AVENUE
ABCD      SECONDARY VETERINARY CENTER INC.   3 MAIN ST.
XYZV.     xxxbusiness                        20 AUTO ST.

这可能使用 Pandas 和 DataFrames 吗?

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案1】:

    您必须使用json_normalize 执行以下操作,问题是,您必须为每个记录路径单独执行此操作 - 一个用于主体,一个用于tradeNames,依此类推。

    with open('test-so.json') as f:
        data = json.load(f)
    df1 = json_normalize(data, 
                     record_path=['principals', 'addresses'], 
                     meta=[['principals', 'lastSeenDate']],
                     errors='ignore')
    
                   city state    zip          address metadata.sources metadata.lastSeen metadata.firstSeen  metadata.sourceCount     principals.lastSeenDate
    0          DENVILLE    NJ  07834    87 JILLOW AVE               []              None               None                     0  2008-01-01T00: 00: 00.000Z
    1  LAKE HAVASU CITY    AZ  86403  1887 WILLOW AVE               []              None               None                     0  1999-07-28T00: 00: 00.000Z
    

    或者你可以直接使用flatten_json,它将整个json扁平化为一行,查看这里的文档-Flatten JSON

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 2020-03-21
      • 2017-10-02
      • 2022-01-11
      • 2019-07-21
      • 2021-12-21
      • 2019-09-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多