Python pandas从一列string的数据select中过滤掉nan

没有使用groupby我怎么会过滤掉没有NaN数据?

假设我有一个matrix,客户将填写“不适用”,“不适用”或其任何变体以及其他内容,并保留为空:

 import pandas as pd import numpy as np df = pd.DataFrame({'movie': ['thg', 'thg', 'mol', 'mol', 'lob', 'lob'], 'rating': [3., 4., 5., np.nan, np.nan, np.nan], 'name': ['John', np.nan, 'N/A', 'Graham', np.nan, np.nan]}) nbs = df['name'].str.extract('^(N/A|NA|na|n/a)') nms=df[(df['name'] != nbs) ] 

输出:

 >>> nms movie name rating 0 thg John 3 1 thg NaN 4 3 mol Graham NaN 4 lob NaN NaN 5 lob NaN NaN 

我将如何筛选出NaN值,以便我可以像这样得到结果:

  movie name rating 0 thg John 3 3 mol Graham NaN 

我猜我需要像~np.isnan东西,但蒂尔达不适用于string。

只要放下他们:

 nms.dropna(thresh=2) 

这将删除至less有两个非NaN所有行

那么你可以放下名字是NaN

 In [87]: nms Out[87]: movie name rating 0 thg John 3 1 thg NaN 4 3 mol Graham NaN 4 lob NaN NaN 5 lob NaN NaN [5 rows x 3 columns] In [89]: nms = nms.dropna(thresh=2) In [90]: nms[nms.name.notnull()] Out[90]: movie name rating 0 thg John 3 3 mol Graham NaN [2 rows x 3 columns] 

编辑

其实看看你最初想要什么,你可以做到这一点没有dropna电话:

 nms[nms.name.notnull()] 

UPDATE

三年后看到这个问题,有一个错误,首先,arg寻找的是非NaN值,所以实际上输出应该是:

 In [4]: nms.dropna(thresh=2) Out[4]: movie name rating 0 thg John 3.0 1 thg NaN 4.0 3 mol Graham NaN 

这可能是我3年前弄错了,或者我运行的pandas版本有错误,两种情况完全可能