【问题标题】:How to normalize json correctly by Python Pandas如何通过 Python Pandas 正确规范化 json
【发布时间】:2018-02-15 21:32:34
【问题描述】:

我是 Python 的初学者。我想要做的是通过 Pandas 加载一个包含外汇历史价格数据的 json 文件并对数据进行统计。我已经阅读了很多关于 Pandas 和解析 json 文件的主题。 我想将具有额外值和嵌套列表的 json 文件传递​​给 pandas 数据框。我遇到了一个问题。

我有一个 json 文件 'EUR_JPY_H8.json'

首先我导入需要的库,

import pandas as pd
import json
from pandas.io.json import json_normalize

然后加载json文件,

with open('EUR_JPY_H8.json') as data_file:    
data = json.load(data_file)

我在下面得到了一个列表:

[{u'complete': True,
u'mid': {u'c': u'119.743',
  u'h': u'119.891',
  u'l': u'119.249',
  u'o': u'119.341'},
u'time': u'1488319200.000000000',
u'volume': 14651},
{u'complete': True,
u'mid': {u'c': u'119.893',
  u'h': u'119.954',
  u'l': u'119.552',
  u'o': u'119.738'},
u'time': u'1488348000.000000000',
u'volume': 10738},
{u'complete': True,
u'mid': {u'c': u'119.946',
  u'h': u'120.221',
  u'l': u'119.840',
  u'o': u'119.888'},
u'time': u'1488376800.000000000',
u'volume': 10041}]

然后我将列表传递给 json_normalize。 尝试获取“mid”下嵌套列表中的价格

result = json_normalize(data,'time',['time','volume','complete',['mid','h'],['mid','l'],['mid','c'],['mid','o']])

但是我得到了这样的结果, json_normalize output

“时间”数据逐行分解为每个整数。 我已经检查了相关文件。我必须将字符串或列表对象传递给 json_normalize 的第二个参数。我怎样才能在那里传递时间戳而不崩溃。

我的预期输出是:

column = 
  index  |  time  | volumn  |  completed  |  mid.h  |  mid.l  |  mid.c  |  mid.o 

【问题讨论】:

    标签: python json python-2.7 pandas


    【解决方案1】:

    你可以直接传递data 而不需要任何额外的参数。

    df = pd.io.json.json_normalize(data)
    df
    
       complete    mid.c    mid.h    mid.l    mid.o                  time  volume
    0      True  119.743  119.891  119.249  119.341  1488319200.000000000   14651
    1      True  119.893  119.954  119.552  119.738  1488348000.000000000   10738
    2      True  119.946  120.221  119.840  119.888  1488376800.000000000   10041
    

    如果要更改列顺序,请使用df.reindex

    df = df.reindex(columns=['time', 'volume', 'complete', 'mid.h', 'mid.l', 'mid.c', 'mid.o'])
    df
    
                       time  volume  complete    mid.h    mid.l    mid.c    mid.o
    0  1488319200.000000000   14651      True  119.891  119.249  119.743  119.341
    1  1488348000.000000000   10738      True  119.954  119.552  119.893  119.738
    2  1488376800.000000000   10041      True  120.221  119.840  119.946  119.888
    

    【讨论】:

    • 有没有办法从文件中读取 json 而不必有json.loads() 的间歇步骤?
    • @AaronN.Brock json.loads 如果您有任意嵌套的 JSON 对象,则需要,否则您可以直接使用文件名调用 pd.read_json。见here
    猜你喜欢
    • 2018-01-02
    • 2020-12-11
    • 2021-12-12
    • 2021-04-26
    • 2020-06-21
    • 2020-09-11
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多