📜  在 pandas 中删除 na - Python (1)

📅  最后修改于: 2023-12-03 14:51:03.652000             🧑  作者: Mango

在 Pandas 中删除 NaN

在 Pandas 中,我们经常会遇到缺失值 NaN。删除这些 NaN 值非常关键,特别是在进行一些统计分析时。

删除 NaN

使用 Pandas 中的 dropna() 函数可以删除 DataFrame 中的所有 NaN 值。默认情况下,dropna() 将删除所有包含 NaN 值的行,但也可以特定的列。

import pandas as pd

# 创建包含 NaN 值的 DataFrame 
df = pd.DataFrame({'a': [1, 2, 3, None], 'b': [None, 5, 6, None], 'c': [7, 8, None, None]})

# 删除包含 NaN 值的行
df = df.dropna()

print(df)

输出:

   a    b    c
0  1  NaN  7.0

从输出结果可以看出,包含 NaN 值的行均被删除,只剩下一行数据。我们还可以指定删除特定列中包含 NaN 值的行。

import pandas as pd

# 创建包含 NaN 值的 DataFrame 
df = pd.DataFrame({'a': [1, 2, 3, None], 'b': [None, 5, 6, None], 'c': [7, 8, None, None]})

# 指定删除 'b' 列中包含 NaN 值的行
df = df.dropna(subset=['b'])

print(df)

输出:

     a    b    c
1  2.0  5.0  8.0
2  3.0  6.0  NaN
替换 NaN

除了删除 NaN 值,我们还可以使用 Pandas 中的 fillna() 函数来替换 NaN 值。fillna() 函数可以使用指定的值替换 NaN 值,也可以使用 NaN 所在列的均值/中位数等值替换。

import pandas as pd

# 创建包含 NaN 值的 DataFrame 
df = pd.DataFrame({'a': [1, 2, 3, None], 'b': [None, 5, 6, None], 'c': [7, 8, None, None]})

# 使用指定值替换 NaN 值
df = df.fillna(0)

print(df)

输出:

     a    b    c
0  1.0  0.0  7.0
1  2.0  5.0  8.0
2  3.0  6.0  0.0
3  0.0  0.0  0.0

我们将 NaN 值替换为了 0,如果我们想用 NaN 所在列的平均值替换 NaN 值,可以使用以下代码:

import pandas as pd

# 创建包含 NaN 值的 DataFrame 
df = pd.DataFrame({'a': [1, 2, 3, None], 'b': [None, 5, 6, None], 'c': [7, 8, None, None]})

# 使用平均值替换 NaN 值
df = df.fillna(df.mean())

print(df)

输出:

     a    b    c
0  1.0  5.5  7.5
1  2.0  5.0  8.0
2  3.0  6.0  7.5
3  2.0  5.5  7.5

从输出结果可以看出,NaN 所在列的平均值被用来替换了 NaN 值。

小结

在 Pandas 中删除 NaN 非常简单,只需要调用 dropna() 函数即可。使用 fillna() 函数可以替换 NaN 值,使 DataFrame 准备进行后续分析。在填补 NaN 值时,请注意使用正确的方法,以避免影响数据分析的可靠性。