我在其中有以下熊猫数据框NaN。
import pandas as pd
df = pd.DataFrame([1,2,3,float('nan')], columns=['A'])
df
A
0 1
1 2
2 3
3 NaN
Run Code Online (Sandbox Code Playgroud)
我还有filter_list要用来过滤数据框的列表。但是,如果我使用.isin()功能,它不会检测到NaN。而不是让True我进入False最后一行
filter_list = [1, float('nan')]
df['A'].isin(filter_list)
0 True
1 False
2 False
3 False
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)
预期产量:
0 True
1 False
2 False
3 True
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)
我知道我可以.isnull()用来检查NaNs。但是在这里,我还需要检查其他值。我正在使用熊猫0.16.0版
编辑:列表filter_list来自用户。所以它可能有也可能没有NaN。那就是为什么我正在使用.isin()
浮点NaN具有有趣的性质,即它不等于自身:
In [194]: float('nan') == float('nan')
Out[194]: False
Run Code Online (Sandbox Code Playgroud)
isin检查是否相等。因此,您不能isin用来检查值是否等于 NaN。要检查NaN,最好使用np.isnull。
In [200]: df['A'].isin([1]) | df['A'].isnull()
Out[200]:
0 True
1 False
2 False
3 True
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)
您可以替换nan为一个不会出现在您的列表中的唯一非 NaN 值,例如'NA'或''。例如:
In [23]: import pandas as pd
In [24]: df = pd.DataFrame([1, 2, 3, pd.np.nan], columns=['A'])
In [25]: filter_list = pd.Series([1, pd.np.nan])
In [26]: na_equiv = 'NA'
In [27]: df['A'].replace(pd.np.nan, na_equiv).isin(filter_list.replace(pd.np.nan, na_equiv))
Out[27]:
0 True
1 False
2 False
3 True
Name: A, dtype: bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3346 次 |
| 最近记录: |