Pandas 如何删除Pandas DataFrame中某列值为NaN的行

Pandas 如何删除Pandas DataFrame中某列值为NaN的行

在数据分析中,我们常常需要对数据进行清洗,其中包括删除一些无效的数据行。在这篇文章中,我们将介绍如何使用Pandas从DataFrame中删除某列值为NaN的行。

阅读更多:Pandas 教程

什么是NaN?

NaN表示“不是一个数字”,它是一个特殊的值,通常用于表示在计算过程中出现了错误或者缺失值。当在Pandas DataFrame中出现NaN时,这行数据通常都需要被清理掉,以免影响后续分析。

如何找到包含NaN的行

使用isna()函数可以找出DataFrame中哪些值是NaN。下面是一个示例:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [20, 30, 25, 40, 35],
        'score': [90, 85, 70, 60, None]}
df = pd.DataFrame(data)

mask = df['score'].isna()

print(mask)
Python

输出结果如下:

0    False
1    False
2    False
3    False
4     True
Name: score, dtype: bool
Python

这个结果显示了哪些行包含NaN。

如何删除包含NaN的行

使用dropna()函数可以删除包含NaN的行。注意,dropna()函数是在原DataFrame上进行修改,因此需要将修改后的结果重新赋值给DataFrame变量。下面是一个示例:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [20, 30, 25, 40, 35],
        'score': [90, 85, 70, 60, None]}
df = pd.DataFrame(data)

df = df.dropna(subset=['score'])

print(df)
Python

输出结果如下:

      name  age  score
0    Alice   20   90.0
1      Bob   30   85.0
2  Charlie   25   70.0
3    David   40   60.0
Python

这个结果删除了包含NaN的行,只保留了完整的行数据。

如何删除指定列中包含NaN的行

在实际数据分析中,我们可能只需要删除某些特定列中包含NaN的行。可以通过subset参数指定需要检查的列名。下面是一个示例:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [20, 30, 25, 40, 35],
        'score': [90, 85, None, 60, 75]}
df = pd.DataFrame(data)

df = df.dropna(subset=['score'])

print(df)
Python

输出结果如下:

    name  age  score
0  Alice   20   90.0
1    Bob   30   85.0
3  David   40   60.0
4   Ella   35   75.0
Python

这个结果只删除了包含NaN的score列的行,而不是删除所有含NaN的行。

如何删除所有包含NaN的行

在某些情况下,我们可能需要删除DataFrame中所有包含NaN的行。可以使用dropna()函数的默认参数,即不指定subset参数,来删除所有的NaN行。下面是一个示例:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [20, None, 25, 40, 35],
        'score': [None, 85, 70, 60, 75]}
df = pd.DataFrame(data)

df = df.dropna()

print(df)
Python

输出结果如下:

    name   age  score
2  Charlie  25   70.0
Python

这个结果只保留了没有包含NaN的行,即删除了所有包含NaN的行。

如何删除包含空白值和NaN的行

在实际数据中,有时会出现空白值,即空格或空字符串。如果需要删除包含空白值和NaN的行,可以使用dropna()函数的how参数。how参数可以取值为anyall,分别表示删除包含任意一个或删除全部列中都为NaN或空白值的行。下面是一个示例:

import pandas as pd

data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Ella'],
        'age': [20, 30, None, 40, ' '],
        'score': [None, 85, 70, 60, 75]}
df = pd.DataFrame(data)

df = df.dropna(how='all')

print(df)
Python

输出结果如下:

      name   age  score
0    Alice  20.0    NaN
1      Bob  30.0   85.0
2  Charlie   NaN   70.0
3    David  40.0   60.0
4     Ella                      75.0
Python

这个结果删除了包含全部列中都为NaN或空白值的行,但保留了包含部分列为NaN的行。

总结

Pandas提供了简便的方法来删除DataFrame中包含NaN、空白值或指定列中包含NaN的行。必要时,可以根据实际需要选择是否仅删除包含全部列中都为NaN或空白值的行。数据分析中,对于有效性未知或缺失的数据,及时清理NaN行可以提高后续分析结果的准确性和可靠性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册