Python json到dataframe:字典的嵌套列表

Python json到dataframe:字典的嵌套列表,python,pandas,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

嗨,我有一个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)

以下方法可以工作,但速度非常慢(对于大数据)

这是更快,但不是我认为潘多尼克

pd.DataFrame([d['entry'] for d in data])
我觉得一定有更好的解决办法。我试过下面的方法,但毫无乐趣

json_normalize(data, ['entry'])
有什么想法吗

我觉得一定有更好的解决办法

定义“更好”。你是说更快吗?没有,不是对于这样的结构,没有。在几乎所有情况下,列表理解都经过了优化,甚至比for循环等价物更快

你是说看起来更好的吗?老实说,我觉得列表很好看

是否有一个神奇的一行程序可以自动处理这种格式的数据?对遗憾的是,您已经找到了它(
json\u normalize
),并且正如您所发现的,它比列表comp慢得多:

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)

所以,没有更好的解决方案了。

pd.DataFrame((d['entry']表示数据中的d))
我认为没有比您的解决方案更好的了:
pd.DataFrame([d['entry']表示数据中的d])
。这当然不是无稽之谈。更好的是更快。不知道为什么,但这让我有点吃惊。Thanks@mark这不应该让你们感到惊讶列表理解是用纯C代码实现的,如果使用得当,速度会非常快。OTOH,
json\u normalize
是用python编写的,它的构建是为了满足广泛的用例。在后一种情况下,开销要大得多。
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)