我正在尝试从数据框中筛选出小于特定值的数据。如果没有NaN,则可以正常工作。但是,当存在nan时,它将忽略NaN值。我想一直包含它小于或大于比较值的时间。
DIV
在上面的结果中显示5、6、7、9。但我也想在那里我尝试过
TD
但是它不起作用。
我该怎么做?
答案 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())]
可行。