使用pandas解析JSON文档中的一个部分

时间:2013-12-31 17:12:06

标签: python json pandas

我正试图用熊猫分析我的电费账单使用情况(以JSON格式下载的每小时数据!woot!)。我能做到,但它比我想象的还要笨拙:

import pandas as pd
import json

with open('test1.json') as f:
    j = json.load(f)
j2 = j['DailyBillingUsage']['RegisterCollections']['Channel']
s = json.dumps(j2)
d = pd.read_json(s, convert_dates='ReadDate')
d.ReadDate = pd.to_datetime(d.ReadDate)

我当时希望能够做到这一点:

d = pd.read_json('test1.json', something_to_guide_pandas)

但是我不能告诉它使用文档的子集/DailyBillingUsage/RegisterCollections/Channel,并且由于某种原因它不会自动转换ISO 8601格式的日期(例如2013-12-27T04:00:00-07:00),即使我' m使用convert_dates的{​​{1}}参数。

有没有办法在不使用变通办法的情况下执行此操作? (显式读取文档,拉出子文档,并调用read_json()函数)

1 个答案:

答案 0 :(得分:1)

您可以使用我的ObjectPath查询语言来执行此操作:

Python方式:

$ sudo pip install objectpath
$ python
>>> from objectpath import *
>>> with open('test1.json') as f:
...    j = json.load(f)
>>> tree=Tree(j)
>>> tree.execute("$.DailyBillingUsage.RegisterCollections.Channel")
-> the result here, a list of readings <-
>>> # some code to convert strings to dates

控制台方式

git clone https://github.com/adriank/ObjectPath.git
cd ObjectPath/ObjectPathPy
python ObjectPath -o file.json
(or python ObjectPath -u URLtoJSON)
>>> $.DailyBillingUsage.RegisterCollections.Channel
-> the result here, a list of readings <-

JSON没有任何日期或时间类型,因此无法自动转换它。搜索并猜测字符串是否为日期会导致性能下降,因此您需要自行完成。

当您发布有关您正在使用的数据的详细信息时,我会更新此答案以满足您的需求。

http://adriank.github.io/ObjectPath/