如何选择具有非NaN值的pandas DataFrame行

10 浏览
0 Comments

如何选择具有非NaN值的pandas DataFrame行

如果不使用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的东西,但是波浪线不能用于字符串。

0
0 Comments

Pandas是一个功能强大的数据处理库,它提供了DataFrame数据结构来处理和分析数据。然而,在实际的数据处理中,我们经常会遇到需要选择DataFrame中某一列具有非NaN值的行的情况。本文将介绍如何解决这个问题。

问题的原因是我们需要根据DataFrame中某一列的非NaN值来选择相应的行。NaN是指"not a number",它表示缺失的或无效的数据。在实际的数据处理中,我们经常会遇到缺失数据的情况。因此,为了准确地选择DataFrame中具有非NaN值的行,我们需要找到一种方法来处理这种情况。

解决这个问题的方法是使用Pandas提供的dropna()函数,并指定subset参数来选择包含非NaN值的列。下面是具体的代码示例:

df.dropna(subset=['columnName1', 'columnName2'])

在这个示例中,我们调用了dropna()函数,并使用subset参数来指定需要选择的列。'columnName1'和'columnName2'是我们想要选择的列的名称。这样,dropna()函数将会返回一个新的DataFrame,其中只包含具有非NaN值的'columnName1'和'columnName2'列的行。

这个方法的好处是它简单明了,能够快速选择具有非NaN值的行。通过使用subset参数,我们可以灵活地指定需要选择的列,满足不同的数据处理需求。

总结起来,通过使用Pandas的dropna()函数和subset参数,我们可以轻松地选择DataFrame中某一列具有非NaN值的行。这个方法简单实用,能够帮助我们高效地处理实际的数据处理任务。希望本文对你理解和解决这个问题有所帮助。

0
0 Comments

在处理pandas DataFrame时,我们经常需要选择包含特定条件的行。一个常见的问题是如何选择在某一列中具有非NaN值的行。在这篇文章中,我们将讨论这个问题的原因和解决方法。

问题的原因是我们想要从DataFrame中选择那些在某一列中具有非NaN值的行。在给出的示例中,我们有一个名为nms的DataFrame,它包含了电影、姓名和评分这三列。我们的目标是选择那些在姓名列中具有非NaN值的行。

为了解决这个问题,我们可以使用pandas的dropna()函数。首先,我们可以使用dropna(thresh=2)来删除所有至少有两个非NaN值的行。然后,我们可以使用nms.name.notnull()来选择那些姓名列中非NaN值的行。

以下是具体的解决方法:

nms.dropna(thresh=2)

这将删除所有至少有两个非NaN值的行。

然后,我们可以使用以下代码来选择那些姓名列中非NaN值的行:

nms[nms.name.notnull()]

以上是最初给出的解决方法。然而,经过三年的时间后,我们发现了一个错误。实际上,dropna()函数的thresh参数是用来指定至少有n个非NaN值的行,所以结果应该是:

nms.dropna(thresh=2)

以上就是这个问题的原因和解决方法。通过删除具有NaN值的行,并选择具有非NaN值的行,我们可以轻松地处理pandas DataFrame中的数据。希望这篇文章对你有所帮助!

0
0 Comments

问题的出现原因:在处理pandas DataFrame时,有时需要选择某一列具有非NaN值的行。因此,需要找到一种方法来实现这个目标。

解决方法:

最简单的解决方法是使用DataFrame的notnull()函数,该函数返回一个布尔值Series,指示DataFrame中的每个元素是否为非NaN值。然后,通过将该Series作为DataFrame的索引,可以选择具有非NaN值的行。

如果需要选择多个列具有非NaN值的行,可以使用all()函数来检查所有列是否都为非NaN值。首先,使用notnull()函数检查每个列是否为非NaN值,然后使用all(1)函数将逻辑与应用于每一行,以检查所有列是否都为非NaN值。最后,将该Series作为DataFrame的索引,可以选择具有非NaN值的行。

以下是完整的代码解决方法:

# 单个列具有非NaN值的行
filtered_df = df[df['name'].notnull()]
# 多个列具有非NaN值的行
filtered_df = df[df[['name', 'country', 'region']].notnull().all(1)]

通过这种方法,可以选择具有非NaN值的行,以满足处理数据的需求。

0