我现在有一个JSON文件,该文件已经试过导入到Python 2.7版的几种方法。Python 2.7版 - 解析奇怪的结构化JSON文件
这是我的数据:
[["195b95d248e5478485bfdff82ed7504a", {"attributes": {"checkin_payment_rate": {"N": "10"}, "dateBooked": {"S": "2015-11-03"}, "dateCheckin": {"S": "2015-11-03T15:41:40.126034+0000"}, "date_created": {"S": "2015-11-03T15:41:29.546868+0000"}, "spaceID": {"S": "67dcfcf3fafe4cde9e50069cdbff2314"}, "stripe_transferID": {"S": "tr_1736umJLCycAnsZaf52drYC0"}, "userID": {"S": "b0c096530f464c1fb2cba8ed5470bbc6"}}}], ["413b1dfe841c4f95b2169da369179cd1", {"attributes": {"checkin_payment_rate": {"N": "10"}, "dateBooked": {"S": "2015-09-11"}, "dateCheckin": {"S": "2015-09-11T20:22:40.218580+0000"}, "date_created": {"S": "2015-09-11T18:39:33.374925+0000"}, "spaceID": {"S": "8c85543487ba49dd816f9b1eceafd3ca"}, "stripe_transferID": {"S": "tr_16jy2eJLCycAnsZatj0aVWyB"}, "userID": {"S": "38522c00725245f58f58cca01a8b62c7"}}}],
哪......你可以看到...只是一个大驴行。
这里的代码看起来什么,当我运行一个简单的负载命令和pprint等。
import json
import pandas as pd
from pandas.io.json import json_normalize
from pprint import pprint
with open('example.json') as json_data:
data = json.load(json_data)
pprint(data)
这是结果
[[u'195b95d248e5478485bfdff82ed7504a',
{u'attributes': {u'checkin_payment_rate': {u'N': u'10'},
u'dateBooked': {u'S': u'2015-09-03'},
u'dateCheckin': {u'S': u'2015-11-03T15:41:40.126034+0000'},
u'date_created': {u'S': u'2015-11-03T15:41:29.546868+0000'},
u'spaceID': {u'S': u'67dcfcf3fafe4cde9e50069cdbff2314'},
u'stripe_transferID': {u'S': u'hr_9876umJLCycAnsZaf52drYC0'},
u'userID': {u'S': u'c9df86530f464c1fb2cba8ed5470bbc6'}}}],
[u'413b1dfe841c4f95b2169da369179cd1',
{u'attributes': {u'checkin_payment_rate': {u'N': u'10'},
u'dateBooked': {u'S': u'2015-04-11'},
u'dateCheckin': {u'S': u'2015-09-11T20:22:40.218580+0000'},
u'date_created': {u'S': u'2015-09-11T18:39:33.374925+0000'},
u'spaceID': {u'S': u'8c85543487ba49dd816f9b1eceafd3ca'},
u'stripe_transferID': {u'S': u'gr_76jy2eJLCycAnsZatj0aVWyB'},
u'userID': {u'S': u'36536c00725245f58f58cca01a8b62c7'}}}],
我的目标是让这个数据转换成具有总体ID(列在第一种情况下,[[u'195b95d248e5478485bfdff82ed7504a”一个不错的,有序的数据帧),对于同一行中的每个属性都有单独的列。
我已经试过
test1 = pd.read_json("example.json","records","frame")
这给了我这样的:
0 \
0 195b95d248e5478485bfdff82ed7504a
1 413b1dfe841c4f95b2169da369179cd1
1
0 {u'attributes': {u'stripe_transferID': {u'S': ...
1 {u'attributes': {u'stripe_transferID': {u'S': ...
这很好地证明,它给我的overaching IDS旁边属性的列的列..但是该ID的所有属性都集中在第二列中。
我也尝试下面的大熊猫正常化选项:
test2 = pd.io.json.json_normalize(data,'attributes',['stripe_transferID','dateCheckin','userID','spaceID','date_created','dateBooked','checkin_payment_rate','N'])
,但我不断收到错误list indices must be integers, not str
我如何能既打破了第2列到test1的各列的任何想法或使测试2工作?感谢你们!
我的上帝太感谢你了泽尔这个完美的作品!我一直试图找出现在的3天中更好的一部分。就好像这并不代表我对Python的新鲜感,难道我可能会麻烦你解释你的自定义函数内部发生了什么吗?我很难理解你的魔法到底发生了什么。非常感谢!! – manofone
乐意提供帮助。要理解你主要知道'词典理解'是什么的功能,查阅它(这是列表对词典的理解)。无论如何,该函数基本上对数据的任何元素(列表)都做了2件事,并将其包装回一个简单的键:value dict:1.将元素的第二部分作为字典,其中每个值都是它是自己的字典,并且只保留内部字典的值,这是字典理解的目的,2.一旦你有一个很好的元素第二部分的简单字典,你只需要添加它的第一部分的id的元素。 –