当前位置: 首页 > 面试题库 >

Python Pandas从一列字符串的数据选择中过滤掉Nan

太叔凌龙
2023-03-14
问题内容

如果不使用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)

这将删除所有至少有两个non-的行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()]

更新

3年后的这个问题,有一个错误,首先thresharg至少查找nNaN值,因此实际上输出应为:

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年前弄错了,或者我运行的熊猫版本存在错误,这两种情况都是可能的。



 类似资料:
  • 如果不使用我如何在没有的情况下过滤数据? 假设我有一个矩阵,客户将填写或其任何变体,其他人则将其留空: 输出: 我如何过滤掉值,这样我就可以得到这样的结果: 我想我需要像但是tilda不能处理字符串。

  • 问题内容: 我喜欢过滤掉字符串长度不等于10的数据。 如果我尝试过滤掉列A或B的字符串长度不等于10的任何行,则尝试这样做。 这工作缓慢,但正在工作。 但是,当A中的数据不是字符串而是数字(有时在read_csv读取输入文件时解释为数字)时,有时会产生错误。 我相信应该有更高效,更优雅的代码来代替。 根据下面的答案和评论,我找到的最简单的解决方案是: 要么 要么 问题答案: 应用于filex.cs

  • 问题内容: 我有一个很大的时间序列数据帧(称为 df ),前5条记录如下所示: 目标: 我正在尝试删除 “ stn” 列中存在列表中 任何 字符串 的 行。因此,我基本上是在尝试过滤此数据集,以使其不包含以下列表中包含任何字符串的行。 尝试: 返回值: 出[78]: 没有! 我尝试了一些引号,方括号甚至是lambda函数的组合;尽管我还很新,所以可能没有正确使用语法。 问题答案: 使用isin:

  • 假设我有一个有2列的表:name和number。Name是一个字符串,可以有一个或多个单词,我想要一个新的查询选择名称编号,但在Name列,它只有最长的词,原来的表。 SQL中是否有一个函数只从字符串中提取最长的单词?

  • 问题内容: 我有一个DataFrame4列,其中2个包含字符串值。我想知道是否有一种方法可以根据针对特定列的部分字符串匹配来选择行? 换句话说,一个函数或lambda函数将执行以下操作 返回一个布尔值。我熟悉的语法,但似乎无法找到一种使用部分字符串匹配说的方法。 有人可以指出正确的方向吗? 问题答案: 基于github问题#620,看来你很快将能够执行以下操作: 更新:熊猫0.8.1及更高版本中提

  • 我正在使用接缝2.2.2。JBoss AS 5上的最终版本。我正在开发一个多页向导。在我的第一页上,用户将能够在文本区域上输入由新行分隔的多个业务名称。 提交页面后,系统解析输入值并将其拆分为字符串列表 然后要求用户从有效企业名称列表中选择进行注册 selectedbusinessName为String类型,而businessNameChoices为List类型 在提交页面时,作为企业名称提交的内