【问题标题】:Can Pandas read a nested JSON blob without parsing sub JSON structures?Pandas 可以在不解析子 JSON 结构的情况下读取嵌套的 JSON blob 吗?
【发布时间】:2014-01-07 10:52:09
【问题描述】:

我正在尝试使用 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}

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

注意:对这个问题进行了更正以修复,以及关于我对 json 对象的引用的错误。

【问题讨论】:

  • 这不是 JSON blob 或结构,它只是一个普通的 Python 字典。所以听起来你已经在其他地方将 JSON 解析为原生 Python 对象,这意味着你可能已经在做你不想做的事情。
  • 感谢指正。我跳过了将 json 转换为字典的步骤。我已经编辑了上面的问题以反映这一点。
  • 现在我什至不明白你希望完成什么。如果您没有像最初所说的那样尝试利用 Pandas 的速度进行 JSON 解析,那么您想要完成什么?如果您计时,我愿意打赌 json.parse 的成本比使用例如字典理解的简单结构重新排列的成本高一个数量级。如果不是,请向我们展示你是如何做到的,展示它的慢点,验证它确实是一个值得优化的热点,并询问如何优化它。

标签: python json pandas


【解决方案1】:

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

不,你不是。您只是用普通的旧 Python dict 构建了一个 DataFramedict 可能是从您代码中的其他地方的 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、构建 Pandas 结构等的成本相比,我怀疑循环 JSON 字符串的速度实际上是一个真正的性能问题。通过分析找出实际花费的时间,然后对其进行优化,而不是仅仅选择代码的一些随机部分并希望它有所作为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2018-12-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多