【问题标题】:Pandas: Convert JSON to Pandas DataframePandas:将 JSON 转换为 Pandas 数据框
【发布时间】:2019-05-14 05:24:36
【问题描述】:

专家,

我在将 Json 解析为 Pandas 并将其保存为 CSV 格式时遇到问题。

data2 = {"date":"2018-01-02","data":{"AAPL":{"open":"170.16","close":"172.26","high":"172.30","low":"169.26","volume":"25555934"},"MSFT":{"open":"86.13","close":"85.95","high":"86.31","low":"85.50","volume":"22483797"}}}

如果我尝试:

df = pd.DataFrame.from_dict(json_normalize(data2), orient='columns')
print(df)

所有内容都打印在一行中:

如果我这样做:

jdata = json.loads(data2)
df = pd.DataFrame(jdata)
print(df.T)

我收到一个错误:TypeError:JSON 对象必须是 str、bytes 或 bytearray,而不是 'dict'

我希望以下表格式打印它,以便我可以将其保存为 csv:

Date        Data    Open    Close   High    Low     Volume
2018-01-02  AAPL    170.16  172.26  172.30  169.26  25555934
2018-01-02  MSFT    86.13   85.95   86.31   85.50   22483797

实现我的目标的正确方法是什么?

谢谢!!

【问题讨论】:

    标签: json python-3.x pandas dataframe


    【解决方案1】:

    你可以使用apply将dict键变成pandasSeries

    df = pd.DataFrame.from_dict(data2)
    df = pd.concat([df['date'],df['data'].apply(pd.Series)], axis=1)
    print(df)
    
                date    open   close    high     low    volume
    AAPL  2018-01-02  170.16  172.26  172.30  169.26  25555934
    MSFT  2018-01-02   86.13   85.95   86.31   85.50  22483797
    

    【讨论】:

    • 这个效率很低
    • @W-B,让我挑选你的大脑,与你提出的方法有什么区别?有什么缺点?
    • @EricArambula 速度,apply 是时间成本函数,因为你有股票数据,当 size 增加时,你会发现 apply + pd.Serise 慢
    • 这些数据来自哪里参考:df['data']?
    【解决方案2】:

    我将使用您的原始输出并对其进行修改

    s=pd.DataFrame(data2)
    pd.concat([s.drop('data',1),pd.DataFrame(s.data.tolist(),index=s.index)],1)
                date   close    high     low    open    volume
    AAPL  2018-01-02  172.26  172.30  169.26  170.16  25555934
    MSFT  2018-01-02   85.95   86.31   85.50   86.13  22483797
    

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 2021-12-13
      • 2020-10-31
      • 2020-09-02
      • 2020-02-29
      • 2017-03-21
      • 2021-03-01
      • 2020-12-16
      • 2021-02-09
      相关资源
      最近更新 更多