【问题标题】:creating suitable dataframe from api从 api 创建合适的数据框
【发布时间】:2022-01-02 00:38:13
【问题描述】:

我有这个 api 链接,我想在其中创建一个数据框。到目前为止,我已经执行了以下步骤:

response = requests.get("https://example.com/api")

数据 = response.json()

df = df.DataFrame(数据)

df.head()

took   | total   | results
3      |  985    | {'AA': '3', 'AC': '1', 'BI': [], 'CY': 'DE', '...}
3      |  985    | {'AA': '8', 'AC': '1', 'BI': [], 'CY': 'DE', '...}
3      |  985    | {'AA': '8', 'AC': '2', 'BI': ['280000'], 'CY':'NL', '...}

但是,我对结果的内容很感兴趣。我希望它是这样的:

'AA' | 'AC' | 'BI' | 'CY'
'3'  | '1'  | null | 'DE'
'8'  | '1'  | null | 'DE'
'8'  | '2'  | '280000' | 'NL'

任何提示我可以如何进行?

提前致谢。

【问题讨论】:

    标签: python json pandas api pyspark


    【解决方案1】:

    查看json_normalize 可能会有一些运气,但鉴于您已经拥有 df,您可以将结果列作为记录读取,然后修复 BI 列。

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'took': {0: 3, 1: 3, 2: 3},
     'total': {0: 985, 1: 985, 2: 985},
     'results': {0: {'AA': '3', 'AC': '1', 'BI': [], 'CY': 'DE'},
      1: {'AA': '8', 'AC': '1', 'BI': [], 'CY': 'DE'},
      2: {'AA': '8', 'AC': '2', 'BI': ['280000'], 'CY':'NL'}}})
    
    df = pd.DataFrame.from_records(df.results.values)
    df['BI'] = df['BI'].apply(lambda x: x[0] if x else np.nan)
    

    输出

      AA AC      BI  CY
    0  3  1     NaN  DE
    1  8  1     NaN  DE
    2  8  2  280000  NL
    

    【讨论】:

    • 感谢您的回答@Chris。我终于让自己采用了一种更简洁的方法。请参阅下面的答案:
    【解决方案2】:

    我很高兴地说,经过大量研究,我找到了解决方案。

    response = requests.get("https://example.com/api")
    data = response.json()
    

    通过查看来探索返回的 JSON 对象的结构

    data.keys()
    

    成功

    dict_keys(['took', 'total', 'results'])

    因为我对“结果”感兴趣,所以我在“返回”键上创建了我的 df

    df = pd.DataFrame(data["results"])
    df.head()
    

    这返回了我预期的数据框?

           AA    AC    BI     CY
      0     3     1   NaN     DE
      1     8     1   NaN     DE
      2     8     2  280000   NL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      相关资源
      最近更新 更多