提高 Pandas 对于非常大的数据帧的性能?

问题描述 投票:0回答:2

我有一些 Pandas 数据框,每个数据框有几百万行。数据帧包含包含 JSON 对象的列,每个列有 100 多个字段。我有一组 24 个函数,它们在数据帧上按顺序运行、处理 JSON(例如,计算 JSON 中两个字段之间的一些字符串距离)并返回添加了一些新字段的 JSON。执行完所有 24 个函数后,我得到一个最终的 JSON,然后它就可以用于我的目的。

我想知道加快该数据集性能的最佳方法是什么。我考虑并阅读了一些事情:

  • 向量化很棘手,因为许多操作并不像“从另一列的值中减去此列的值”那么简单。
  • 我阅读了一些 Pandas 文档,其中指出的一些选项是 Cython(将字符串编辑距离转换为 Cython 可能很棘手,特别是因为我使用的是外部 Python 包)和 Numba/JIT(但这提到了仅适用于数值计算)。
  • 控制线程数量可能是一种选择。这 24 个功能大部分可以在彼此不依赖的情况下运行。
python pandas dataframe performance
2个回答
1
投票

您正在寻求建议,这不是提供一般建议的最佳网站,但尽管如此,我会尝试指出一些事情。

  1. 您已经考虑过的想法不会有帮助 - Cython、Numba 和线程都无法解决主要问题 - 数据格式不利于数据操作的性能。

  2. 我建议您首先“解压”存储在数据帧的列中的 JSON。优选地,JSON 的每个字段(强制或可选 - 在此阶段处理空值)最终成为数据帧的一列。如果存在嵌套字典,您可能需要考虑拆分数据帧(特别是如果 24 个函数在单独的嵌套 JSON 字典中单独工作)。或者,您应该努力扁平化 JSON。

  3. 转换为可为您提供最佳性能的数据格式。 JSON 以“文本”格式存储所有数据。数字最好以二进制格式使用。您可以使用 df['col'].astype(...) 对您怀疑应该转换的列逐列执行此操作(

    也适用于整个数据框
    )。

  4. 更新 24 个函数,使其不再对数据帧中存储的 JSON 字符串进行操作,而是对数据帧的字段进行操作。
  5. 重新组合 JSON 进行存储(我假设您需要这种格式的它们)。在此阶段,将发生从数字到字符串的隐式转换。
  6. 鉴于您在问题中提供的详细程度,建议必然很简短。如果您对上述任何一点有任何更详细的问题,最好就每个问题提出最简单的问题(最好包含一个自给自足的
MWE

)。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.