gpt4 book ai didi

python - 使用 toPandas 时强制将 null 一致转换为 nan

转载 作者:行者123 更新时间:2023-12-04 04:09:52 25 4
gpt4 key购买 nike

pyspark 中的 toPandas 方法对于数字列中的空值不一致。有没有办法让它更一致?

一个例子

sc 是 sparkContext。 Spark 版本是2.3.2。我不确定如何包含笔记本结果,但我只会评论输出。它非常简单,您可以自己在笔记本上检查。

sparkTest = sc.createDataFrame(
[
(1, 1 ),
(2, None),
(None, None),
],
['a', 'b']
)
sparkTest.show() # all None values are neatly converted to null

pdTest1 = sparkTest.toPandas()
pdTest1 # all None values are NaN
np.isnan(pdTest1['b']) # this a series of dtype bool

pdTest2 = sparkTest.filter(col('b').isNull()).toPandas()
pdTest2 # the null value in column a is still NaN, but the two null in column b are now None
np.isnan(pdTest2['b']) # this throws an error

这在编程时当然是有问题的,并且无法事先预测列是否全部为空。

顺便说一句,我想将此报告为一个问题,但我不确定在哪里。 github page似乎没有问题部分?

最佳答案

np.isnan 可以应用于原生 dtype 的 NumPy 数组(例如 np.float64),但应用于对象数组时会引发 TypeError:

pdTest1['b']
0 1.0
1 NaN
2 NaN
Name: b, dtype: float64

pdTest2['b']
0 None
1 None
Name: b, dtype: object

如果你有 pandas,你可以使用 pandas.isnull 代替:

import pandas as pd


pd.isnull(pdTest1['b'])
0 False
1 True
2 True
Name: b, dtype: bool


pd.isnull(pdTest2['b'])
0 True
1 True
Name: b, dtype: bool

这对于 np.nanNone 都是一致的。

或者,您可以(如果可能的话给定您的数据),将您的 pdTest2['b'] 数组转换为原生 numpy 类型之一(例如 np.float64) 以确保 np.isnan 正常工作,例如:

pdTest2 = sparkTest.filter(f.col('b').isNull()).toPandas()
np.isnan(pdTest2['b'].astype(np.float64))
0 True
1 True
Name: b, dtype: bool

关于python - 使用 toPandas 时强制将 null 一致转换为 nan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61910148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com