我有一个要转换为json对象的json字符串数据框。 df.col.apply(json.loads)在熊猫上工作正常,但在使用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
答案 0 :(得分:1)
此问题也在GitHub上提出,并在此处得到解答:https://github.com/modin-project/modin/issues/616
错误来自运行时的错误检查组件,我们在空的DataFrame上调用apply(或agg)以确定返回类型,并让熊猫处理错误检查(Link)。 / p>
在本地,我可以重现此问题,并通过更改行以在Series的一行上执行操作来解决此问题。这可能会影响性能,因此我需要做一些更多的调整,以查看是否有一种方法可以加快它的速度,并且仍然很健壮。修复后,该检查的开销约为256列,约为10ms,我认为我们不希望错误检查花费那么长的时间。
在发布此修复程序之前,可以使用也适用于空数据的代码来解决此问题,例如:
def safe_loads(x)
try:
return json.loads(x)
except:
return None
modin.pandas.DataFrame.from_dict({'a': ['{}']}).a.apply(safe_loads)