如果不使用groupby,我如何过滤掉没有NaN的数据?

假设我有一个矩阵,客户将填写'N/A','n/a'或其任何变体,其他人则将其留空:

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个,但tilda不能与字符串一起工作.

推荐答案

把它们扔掉就行了:

nms.dropna(thresh=2)

这将删除至少有两个非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]

EDIT

实际上,看看你最初想要什么,你就可以不用打dropna个电话:

nms[nms.name.notnull()]

UPDATE

3年后再看这个问题,有一个错误,首先thresh参数查找至少n个非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

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

Python相关问答推荐

如何在Pygame中绘制右对齐的文本?

如何将不同长度的新列添加到现有的框架中

从Python调用GMP C函数时的分段错误和内存泄漏

Flask主机持续 bootstrap 本地IP| Python

socket.gaierror:[Errno -2]名称或服务未知|Firebase x Raspberry Pi

pandas DataFrame中类型转换混乱

"Discord机器人中缺少所需的位置参数ctx

如何在Python中使用io.BytesIO写入现有缓冲区?

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

如何自动抓取以下CSV

线性模型PanelOLS和statmodels OLS之间的区别

Pandas 滚动最接近的价值

带条件计算最小值

基于字符串匹配条件合并两个帧

如何在给定的条件下使numpy数组的计算速度最快?

avxspan与pandas period_range

driver. find_element无法通过class_name找到元素'""

如何保持服务器发送的事件连接活动?

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道