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版本有错误,两种情况完全可能