我正在尝试使用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对象的引用的错误。
答案 0 :(得分:1)
我正在尝试使用Pandas解析JSON blob
不,你不是。你只是用普通的旧Python DataFrame
构建一个dict
。 dict
可能已经在代码中的其他位置从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结构等的成本相比较。通过分析来确定实际花费时间的是什么,然后优化它,而不是仅仅挑选代码的一些随机部分,并希望它有所作为。