📅  最后修改于: 2023-12-03 15:38:10.574000             🧑  作者: Mango
在 Pandas 中,许多 DataFrame 可能包含一些 NaN 值或空值。在一些情况下,我们需要将这些具有 NaN 值的列删除掉以免对计算结果造成影响。本文介绍几种方法来实现从 Pandas DataFrame 中删除具有 NaN 值的列。
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 值的列。
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 值的列的功能。
最后,我们可以尝试将 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 的强大工具。