gpt4 book ai didi

python - 为什么测试 `NaN == NaN` 不适用于从 pandas dataFrame 中删除?

转载 作者:太空狗 更新时间:2023-10-29 21:15:32 25 4
gpt4 key购买 nike

请解释 NaN 在 pandas 中是如何处理的,因为以下逻辑对我来说似乎是“错误的”,我尝试了各种方法(如下所示)来删除空值。

我使用 read.csv 从 CSV 文件加载的数据框有一个列 comments,大部分时间都是空的。

marked_results.comments 列如下所示;该列的所有其余部分都是 NaN,因此 pandas 将空条目加载为 NaN,到目前为止一切顺利:

0       VP
1 VP
2 VP
3 TEST
4 NaN
5 NaN
....

现在我尝试删除这些条目,只有这个有效:

  • marked_results.comments.isnull()

所有这些都不起作用:

  • marked_results.comments.dropna() 只给出相同的列,没有任何内容被丢弃,令人困惑。
  • marked_results.comments == NaN 仅给出一系列所有 False。没有什么是 NaN ......令人困惑。
  • 同样 marked_results.comments == nan

我也试过:

comments_values = marked_results.comments.unique()

array(['VP', 'TEST', nan], dtype=object)

# Ah, gotya! so now ive tried:
marked_results.comments == comments_values[2]
# but still all the results are Falses!!!

最佳答案

您应该使用 isnullnotnull 来测试 NaN(这些使用 pandas dtypes 比 numpy 更健壮),参见 "values considered missing" in the docs .

使用系列方法 dropna在列上不会影响原始数据框,但可以做你想做的:

In [11]: df
Out[11]:
comments
0 VP
1 VP
2 VP
3 TEST
4 NaN
5 NaN

In [12]: df.comments.dropna()
Out[12]:
0 VP
1 VP
2 VP
3 TEST
Name: comments, dtype: object

dropna DataFrame 方法有一个子集参数(用于删除特定列中具有 NaN 的行):

In [13]: df.dropna(subset=['comments'])
Out[13]:
comments
0 VP
1 VP
2 VP
3 TEST

In [14]: df = df.dropna(subset=['comments'])

关于python - 为什么测试 `NaN == NaN` 不适用于从 pandas dataFrame 中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17969878/

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