python - 使用 pandas 数据帧不等式保持 NaN

标签 python pandas

我有一个 pandas.DataFrame 对象,其中包含大约 100 列和 200000 行数据。我正在尝试将其转换为 bool 数据框,其中 True 表示该值大于阈值,False 表示它小于阈值,并且保留 NaN 值。

如果没有 NaN 值,我需要大约 60 毫秒才能运行:

df >= threshold

但是当我尝试处理 NaN 时,下面的方法有效,但速度很慢(20 秒)。

def func(x):
    if x >= threshold:
        return True
    elif x < threshold:
        return False
    else:
        return x
df.apply(lambda x: x.apply(lambda x: func(x)))

有没有更快的方法?

最佳答案

你可以这样做:

new_df = df >= threshold
new_df[df.isnull()] = np.NaN

但这与您使用 apply 方法获得的结果不同。这里你的面具有包含 NaN、0.0 和 1.0 的 float dtype。在 apply 解决方案中,您将获得具有 NaN、False 和 True 的 object dtype。

两者都不能用作面具,因为您可能得不到想要的东西。 IEEE 表示任何 NaN 比较都必须产生 False,而 apply 方法通过返回 NaN 隐含地违反了这一点!

最好的选择是单独跟踪 NaN,并且在安装瓶颈时 df.isnull() 非常快。

关于python - 使用 pandas 数据帧不等式保持 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783027/

相关文章:

python - 了解二元组和三元组的 NLTK 搭配评分

javascript - TemplateSyntaxError 无法解析其余部分

python - Django 中无效的 block 标签 i=0

python - 如何使用 pywinauto 使窗口透明?

python - 使用 xlrd 读取日期并使用 xlsxwriter 在 Python 中写入日期

python-3.x - 根据特定条件生成带有填充的行 - pandas

python - 如何将按 x、y、z 坐标排序的 pandas 数据框转换为 numpy 数组列表?

python - float 到百分比样式错误的 Pandas 数据框列

python - 根据特定值显示行

python - 如何转换 Pandas 中日期时间列的时区,然后删除时区?