Pandas可以在不解析子JSON结构的情况下读取嵌套的JSON blob吗?

时间:2013-12-19 01:52:26

标签: python json pandas

我正在尝试使用Pandas解析JSON blob而不解析嵌套的JSON结构。这是我的意思的一个例子。

import json
import pandas as pd

x = json.loads('{"test":"something", "yes":{"nest":10}}')
df = pd.DataFrame(x)

当我df.head()时,我得到以下内容:

        test         yes
nest    something    10

我真正想要的是......

        test         yes
1       something    {"nest": 10}

关于如何用熊猫做这个的任何想法?我有解决方法的想法,但我正在解析GB的JSON文件,并且不希望依赖慢速for循环来转换和准备Pandas的信息。在仍然利用熊猫的速度的同时有效地做到这一点会很棒。

注意:对此问题进行了修正以及有关我对json对象的引用的错误。

1 个答案:

答案 0 :(得分:1)

  

我正在尝试使用Pandas解析JSON blob

不,你不是。你只是用普通的旧Python DataFrame构建一个dictdict可能已经在代码中的其他位置从JSON解析,或者它可能从来就不是JSON。没关系;无论哪种方式,你都没有使用Pandas的JSON解析。实际上,如果您尝试直接从JSON字符串构造DataFrame,那么您将获得PandasError

如果你使用Pandas解析,你可以使用它的选项,如pandas.read_json中所述。例如:

>>> j = '{"test": "something", "yes": {"nest": 10}}'
>>> pd.read_json(j, typ='series')
test        something
yes     {u'nest': 10}
dtype: object

(当然这显然是Series,而不是DataFrame。但我不确定你想要DataFrame到底是什么......)

但是如果你已经在其他地方解析了JSON,你显然不能在其上使用Pandas的数据解析。


此外:

  

...并且不希望依赖缓慢的for循环来转换和准备Pandas的信息......

然后使用,例如,dict理解,生成器表达式,itertools函数,或其他可以在C中而不是在Python中进行循环的东西。

但是,我怀疑循环JSON字符串的速度实际上是一个真正的性能问题,与解析JSON,构建Pandas结构等的成本相比较。通过分析来确定实际花费时间的是什么,然后优化它,而不是仅仅挑选代码的一些随机部分,并希望它有所作为。