📜  如何删除 Pandas DataFrame 中具有 NaN 值的列?(1)

📅  最后修改于: 2023-12-03 15:38:10.574000             🧑  作者: Mango

如何删除 Pandas DataFrame 中具有 NaN 值的列?

在 Pandas 中,许多 DataFrame 可能包含一些 NaN 值或空值。在一些情况下,我们需要将这些具有 NaN 值的列删除掉以免对计算结果造成影响。本文介绍几种方法来实现从 Pandas DataFrame 中删除具有 NaN 值的列。

方法 1: 使用 dropna() 函数

dropna() 函数被广泛地用于 DataFrame 中删除包含 NaN 值的行和列。下面是如何使用它来删除 DataFrame 中具有 NaN 值的列的方法:

import pandas as pd
 
# 创建一个包含 NaN 值的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3, None, 5], 'B': [None, 6, 7, 8, 9], 'C':[10, 11, 12, 13, 14]})
 
# 使用 dropna() 函数来删除具有 NaN 值的列
df = df.dropna(axis=1)
 
print(df)

在上面的代码中,我们先创建了一个包含 NaN 值的 DataFrame,然后使用 dropna() 函数来删除具有 NaN 值的列。在本例中,我们使用 axis=1 参数来指定我们要删除的是列。

输出结果:

    C
0  10
1  11
2  12
3  13
4  14

如上所述,我们在 DataFrame 中成功删除了具有 NaN 值的列。

方法 2: 使用 isna() 函数

另一种删除具有 NaN 值的列的方法是使用 isna() 函数。该函数会生成一个布尔型的 DataFrame,然后我们可以使用 Pandas 的过滤器语法来获取并删除具有 NaN 值的列。下面是一个实现的例子:

import pandas as pd
 
# 创建一个包含 NaN 值的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3, None, 5], 'B': [None, 6, 7, 8, 9], 'C':[10, 11, 12, 13, 14]})
 
# 创建一个布尔型的 DataFrame,值为 True 表示包含 NaN 值
bool_df = df.isna()
 
# 使用过滤器语法来删除具有 NaN 值的列
df = df.loc[:, ~bool_df.any()]
 
print(df)

在上面的代码中,我们使用 isna() 函数来创建一个布尔型的 DataFrame,使用过滤器语法来获取并删除具有 NaN 值的列。需要注意的是,我们在获取列时使用了 ~ 符号来对布尔型 DataFrame 进行反转;我们使用了 any() 函数来获取是否有 True 值出现,如果有的话,我们则保留该列。

输出结果:

    C
0  10
1  11
2  12
3  13
4  14

同样我们在 DataFrame 中实现了删除具有 NaN 值的列的功能。

方法 3: 填充 NaN 值

最后,我们可以尝试将 DataFrame 中的 NaN 值替换为其他值,从而避免对计算结果造成影响。下面是一个实现具有 NaN 值的列填充或替换 NaN 值为特定值的方法:

import pandas as pd
 
# 创建一个包含 NaN 值的 DataFrame
df = pd.DataFrame({'A': [1, 2, 3, None, 5], 'B': [None, 6, 7, 8, 9], 'C':[10, 11, 12, 13, 14]})
 
# 使用 fillna() 函数来填充 NaN 值
df = df.fillna(0)
 
print(df)

在上面的代码中,我们使用 fillna() 函数将 NaN 值替换为 0。我们可以替换为任何值,如平均值,中位数等。

输出结果:

     A    B   C
0  1.0  0.0  10
1  2.0  6.0  11
2  3.0  7.0  12
3  0.0  8.0  13
4  5.0  9.0  14

最终我们成功地把具有 NaN 值的列替换为了给定特定值的 DataFrame。

总结

在 Pandas 中,我们可以使用 dropna() 函数,isna() 函数或 fillna() 函数来删除具有 NaN 值的列或将 NaN 值替换为特定值。它们都是 Pandas 可以灵活处理包含 NaN 值的 DataFrame 的强大工具。