簡體   English   中英

如何將具有多列和索引的 JSON 字符串轉換為 Pandas dataframe?

[英]How to convert a JSON string with multiple columns and an index to a Pandas dataframe?

我需要將具有 2 列和索引的 JSON 字符串轉換為 pandas dataframe 但我遇到了一個錯誤,我找不到解決方案。

我嘗試使用不同的方向orient='columnsorient='index對 JSON 進行編碼,我還對 JSON 字符串進行了規范化並指定了列名,但仍然存在錯誤。 看起來有點棘手,我該怎么做?

這是我使用的字符串:

> type(data)
<class 'str'>

> print(data)
{
"2020-04-02T00:00:00.000Z": {
    "A": 133.25,
    "B": 0.000155642
},
"2020-04-03T00:00:00.000Z": {
    "A": 136.45,
    "B": 0.0001498913
},
"2020-04-04T00:00:00.000Z": {
    "A": 141.55,
    "B": 0.0001471562
}
}

df = pd.DataFrame.from_dict(data)
df = pd.DataFrame.from_dict(json_normalize(data), orient='index', columns=['A', 'B'])

Python 拋出一個錯誤,說AttributeError: 'str' object has no attribute 'values'

我想要的是這樣的 dataframe:

                                A         B
2020-04-02 00:00:00+00:00  133.25  0.000156
2020-04-03 00:00:00+00:00  136.45  0.000150
2020-04-04 00:00:00+00:00  141.55  0.000147

謝謝,

您可以使用pandas.read_json 從文檔中,您可以指定orient = index ,它是 dict 中預期 JSON 字符串格式的指示,例如{index -> {column -> value}}

>>> import pandas as pd
>>> data = """
... {
...     "2020-04-02T00:00:00.000Z": {
...         "A": 133.25,
...         "B": 0.000155642
...     },
...     "2020-04-03T00:00:00.000Z": {
...         "A": 136.45,
...         "B": 0.0001498913
...     },
...     "2020-04-04T00:00:00.000Z": {
...         "A": 141.55,
...         "B": 0.0001471562
...     }
... }"""
>>> 
>>> df = pd.read_json(data, orient='index')
>>> df
                                A         B
2020-04-02 00:00:00+00:00  133.25  0.000156
2020-04-03 00:00:00+00:00  136.45  0.000150
2020-04-04 00:00:00+00:00  141.55  0.000147

您可以像這樣使用 T :

df = pd.DataFrame.from_dict(data).T

結果是這樣的:

                          A         B
2020-04-02T00:00:00.000Z  133.25  0.000156
2020-04-03T00:00:00.000Z  136.45  0.000150
2020-04-04T00:00:00.000Z  141.55  0.000147

來源: https://note.nkmk.me/en/python-pandas-t-transpose/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM