如何通过 Python Pandas 正确规范化 json
Posted
技术标签:
【中文标题】如何通过 Python Pandas 正确规范化 json【英文标题】:How to normalize json correctly by Python Pandas 【发布时间】: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
【问题讨论】:
【参考方案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。以上是关于如何通过 Python Pandas 正确规范化 json的主要内容,如果未能解决你的问题,请参考以下文章
Python pandas:规范化数据的最佳方法? [复制]
Python Pandas Dataframe:规范化 0.01 到 0.99 之间的数据?