json到dataframe:嵌套的字典列表

时间:2018-05-05 21:37:09

标签: python pandas

您好我有一个类似于

的json列表
data = [{'entry':{'points': 50, 'time': '5:00', 'year': 2010}}, 
   {'entry':{'points': 25, 'time': '6:00', 'month': "february"}}, 
   {'entry':{'points':90, 'time': '9:00', 'month': 'january'}}, 
   {'entry':{'points':20, 'month': 'june'}}]

如何从中创建一个pandas数据框(我想删除输入字段,因为它是' reduntant)?

以下工作但速度极慢(对于大数据)

from pandas.io.json import json_normalize    
json_normalize(data)

这更快但不像我认为的那样松散

pd.DataFrame([d['entry'] for d in data])

我觉得必须有更好的解决方案。我没有高兴地尝试了下面的事情

json_normalize(data, ['entry'])

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

  

我觉得必须有更好的解决方案。

定义"更好"。你的意思更快吗?没有,不是这样的结构,不是。在几乎每个实例中,列表推导都被优化为比它们的for-loops等价物更快。

你的意思是看起来更好吗?我认为列表理解看起来很不错,说实话。

是否有一种神奇的单行程序可以自动处理这种格式的数据?是!可悲的是,您已经找到了它(json_normalize),并且正如您所发现的,它比列表组件慢得多:

In [431]: data = data * 10000

In [432]: %timeit json_normalize(data)
1.3 s ± 19.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [433]: %timeit pd.DataFrame([d['entry'] for d in data])
63.2 ms ± 1.26 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

所以,不,没有,这不是一个更好的解决方案。