0

我有一个要转换为 json 对象的 json 字符串数据框。df.col.apply(json.loads) 适用于 pandas,但在使用 modin 数据帧时失败。

例子:

import pandas
import modin.pandas
import json

pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(json.loads)

0    {}
Name: a, dtype: object


modin.pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(json.loads)

TypeError: the JSON object must be str, bytes or bytearray, not float
4

1 回答 1

1

这个问题也在 GitHub 上提出,在这里得到了回答:https ://github.com/modin-project/modin/issues/616

错误来自运行的错误检查组件,我们在空 DataFrame 上调用 apply(或 agg)来确定返回类型并让 pandas 处理错误检查(Link)。

在本地,我可以重现此问题,并通过更改线路以在系列的一条线路上执行操作来修复它。这可能会影响性能,所以我需要做更多的调整,看看是否有办法加速它并且仍然很健壮。修复后,256 列的检查开销约为 10 毫秒,我认为我们不希望错误检查花费那么长时间。

在修复发布之前,可以通过使用也适用于空数据的代码来解决此问题 - 例如:

def safe_loads(x)
  try:
    return json.loads(x)
  except:
    return None

modin.pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(safe_loads)
于 2019-05-13T06:41:39.230 回答