在Python中将Json Dict对象转换为DataFrame

时间:2019-04-04 14:19:35

标签: python json pandas dictionary

我从python中的Web服务获取了一些Json dict对象格式的嵌套输出。输出以嵌套的Json dict对象的形式出现。现在,当我尝试将其转换为python中的DataFrame时,不将父键视为列。一键之下有五个要素。我希望总共6列将出现在数据框中。

import pandas as pd
data = {'2019-04-04 05:59:00': 
                              {'1. open': '1353.5500', 
                              '2. high': '1354.8000', 
                              '3. low': '1353.0500', 
                              '4. close': '1353.0500', 
                              '5. volume': '25924'}, 
       '2019-04-04 05:58:00': {'1. open': '1354.2500', 
                               '2. high': '1354.2500', 
                               '3. low': '1353.4000', 
                               '4. close': '1353.4500', 
                               '5. volume': '38418'}
        }
df1=pd.DataFrame(data)
print(df1)

"""
  Output --
                2019-04-04 05:59:00 2019-04-04 05:58:00
  1. open             1353.5500           1354.2500
  2. high             1354.8000           1354.2500
  3. low              1353.0500           1353.4000
  4. close            1353.0500           1353.4500
  5. volume               25924               38418
"""

df2=df1.transpose()
print(df2)

""" 
  Output --
                         1. open    2. high     3. low   4. close 5. volume
2019-04-04 05:59:00  1353.5500  1354.8000  1353.0500  1353.0500     25924
2019-04-04 05:58:00  1354.2500  1354.2500  1353.4000  1353.4500     38418
"""

这里第一个日期字段被视为索引,因此我的第一列从(1.open)开始,但我需要的第一列应该是日期。

对此有所帮助。

结果应该像这样:

"""
Index    Date                 1. open    2. high    3. low     4. close      5. volume
0        2019-04-04 05:59:00  1353.5500  1354.8000  1353.0500  1353.0500     25924
1        2019-04-04 05:58:00  1354.2500  1354.2500  1353.4000  1353.4500     38418
"""

1 个答案:

答案 0 :(得分:1)

df2.rename_axis(index='Date').reset_index()

给你:

                  Date    1. open    2. high     3. low   4. close 5. volume
0  2019-04-04 05:58:00  1354.2500  1354.2500  1353.4000  1353.4500     38418
1  2019-04-04 05:59:00  1353.5500  1354.8000  1353.0500  1353.0500     25924

还请注意,有一种使用df2构建data的简单方法:

df2 = pd.DataFrame.from_dict(data, orient='index')

将两个部分放在一起:

pd.DataFrame.from_dict(data, orient='index').rename_axis(index='Date').reset_index()

要命名索引,可以在末尾添加.rename_axis(index='Index')

                      Date    1. open    2. high     3. low   4. close 5. volume
Index
0      2019-04-04 05:58:00  1354.2500  1354.2500  1353.4000  1353.4500     38418
1      2019-04-04 05:59:00  1353.5500  1354.8000  1353.0500  1353.0500     25924