如果不使用groupby我如何在没有NaN的情况下过滤数据
假设我有一个矩阵,客户将填写'N/a'、'N/a'或其任何变体,其他人则将其留空:
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({'movie':['thg','thg','mol','mol','mol','lob','lob'],
‘评级’:[3,4,5,np.nan,np.nan,np.nan],
'姓名':['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)]
输出:
>&燃气轮机&燃气轮机;网络管理系统
电影名称评级
约翰3号
1 thg NaN 4
3摩尔格雷厄姆南
4罗楠楠
5罗南南
我如何筛选出NaN值,以便获得如下结果:
电影名称分级
约翰3号
3摩尔格雷厄姆南
我猜我需要类似于~np.isnan的东西,但是tilda不能处理字符串
放下它们:
nms.dropna(thresh=2)
这将删除至少有两个非NaN的所有行
然后,您可以在名称为NaN的地方删除:
[87]on
:
网络管理系统
Output[87]:
电影名称评级
约翰3号
1 thg NaN 4
3摩尔格雷厄姆南
4罗楠楠
5罗南南
[5行x 3列]
At[89]on:
nms=nms.dropna(阈值=2)
At[90]on:
nms[nms.name.notnull()]
Output[90]:
电影名称评级
约翰3号
3摩尔格雷厄姆南
[2行x 3列]
编辑
实际上,看看您最初想要的是什么,您就可以这样做,而无需调用dropna:
nms[nms.name.notnull()]
更新
3年后看这个问题,有一个错误,首先thresharg查找至少nnon-NaN值,因此实际上输出应该是:
[4]on
:
nms.dropna(阈值=2)
Output[4]:
电影名称评级
0 thg约翰3.0
1 thg NaN 4.0
3摩尔格雷厄姆南
可能是3年前我弄错了,或者是我运行的熊猫版本有错误,这两种情况都是完全可能的