df.loc过滤器无法处理空值(None values)。

7
为什么当过滤器为Project ID == None时,此过滤器不起作用?我还注意到is None而不是== None会返回KeyError: False
import pandas as pd
df = pd.DataFrame(data = [['Project1', 'CT', 800], [None, 3, 1000], ['Project3', 'CA', 20]], columns=['Project ID', 'State', 'Cost'])

print df.loc[df['Project ID'] == 'Project1'].values
print df.loc[df['Project ID'] == None].values

输出:

[['Project1' 'CT' 800L]]
[]
2个回答

6

您需要使用 isnull 来实现此操作:

In [3]:

df[df['Project ID'].isnull()]
Out[3]:
  Project ID State  Cost
1       None     3  1000

或者使用apply
In [5]:

df.loc[df['Project ID'].apply(lambda x: x is None)]
Out[5]:
  Project ID State  Cost
1       None     3  1000

1

为了进一步说明,它不起作用是因为 pandas 使用了 np.nan,并且:

print np.nan == np.nan   # False
print np.nan == None     # False
print np.isnan(np.nan)   # True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接