熊猫数据框中的值过滤器保持NaN

时间:2020-02-06 09:32:15

标签: python pandas filter data-science nan

我正在尝试从数据框中筛选出小于特定值的数据。如果没有NaN,则可以正常工作。但是,当存在nan时,它将忽略NaN值。我想一直包含它小于或大于比较值的时间。

DIV

enter image description here

在上面的结果中显示5、6、7、9。但我也想在那里我尝试过

TD

但是它不起作用。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

使用运算符:~

df_chunked[~(df_chunked['value'].ge(10))]
#df_chunked[~(df_chunked['value']>=10)] #greater or equal(the same)

   index  value
0      1    5.0
1      2    6.0
2      3    7.0
3      4    NaN
4      5    9.0

为什么?

因为逻辑运算只是忽略NaN值并将其取为False ,通常在以下数据框中可以看到,所以如果要避免使用series.isna ( 避免不必要的额外代码),并简化代码,只需将反逻辑与~

一起使用
print(df.assign(greater_than_5 = df['value'].gt(5),
          not_greater_than_5 = df['value'].le(5)))


   index  value  greater_than_5  not_greater_than_5
0      1    5.0           False                True
1      2    6.0            True               False
2      3    7.0            True               False
3      4    NaN           False               False
4      5    9.0            True               False
5      6    3.0           False                True
6      7   11.0            True               False
7      8   34.0            True               False
8      9   78.0            True               False

答案 1 :(得分:2)

尝试:

df_result = df_chunked[(df_chunked['value'] < 10) | (df_chunked['value'].isna())]
df_result 
   index  value
0      1    5.0
1      2    6.0
2      3    7.0
3      4    NaN
4      5    9.0

答案 2 :(得分:0)

您可以按如下所示简单地定义df_result:

df_result = df_chunked[(df_chunked["value"] < 10) | (df_chunked["value"].isnull())]

可行。