📌  相关文章
📜  在 pandas 数据框中删除 nan - Python (1)

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

在 pandas 数据框中删除 nan - Python

当使用 pandas 处理数据时,经常遇到需要删除数据框中的空值(NaN)的情况。这些 NaN 值可能是由于数据采集或转换过程中的缺失值或错误值产生的。在 pandas 中有多个选项可以删除 NaN 值,本文将介绍其中几种常用的方法。

创建一个含 NaN 值的数据框

首先要创建一个数据框,包含 NaN 值,用作演示。

import pandas as pd
import numpy as np

data = {'A': [1, 2, np.nan, 4], 
        'B': [5, np.nan, np.nan, 8], 
        'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)

print(df)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
2  NaN  NaN  11
3  4.0  8.0  12
删除空值
删除任意行或列中带有 NaN 值的数据

dropna 方法用于删除含有 NaN 值的行或列。删除行还是列,取决于 axis 参数的设置。默认情况下,axis=0,表示删除行;axis=1,表示删除列。

# 删除任意行或列中带有 NaN 值的数据
df_dropna = df.dropna()

print(df_dropna)

输出:

     A    B   C
0  1.0  5.0   9
3  4.0  8.0  12
删除所有元素均为 NaN 的行或列

dropna 方法还可以通过 how 参数来删除所有元素均为 NaN 的行或列。当 how='all' 时,表示删除所有元素均为 NaN 的行或列。

# 删除所有元素均为 NaN 的行或列
df_dropna_all = df.dropna(how='all', axis=1)

print(df_dropna_all)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
2  NaN  NaN  11
3  4.0  8.0  12
删除指定数量及以上 NaN 值的行或列

dropna 方法还可以通过 thresh 参数来删除指定数量及以上的 NaN 值的行或列。当 thresh 参数设为 n 时,表示删除含有 n 个及以下的非 NaN 值的行或列。

# 删除指定数量及以上 NaN 值的行或列
df_dropna_thresh = df.dropna(thresh=2)

print(df_dropna_thresh)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  NaN  10
3  4.0  8.0  12
填充空值

fillna 方法用于填充数据框中的空值。可以用特定值、均值、中位数等代替 NaN 值。

用特定值填充空值

下面的代码用常数 0 来填充空值:

# 用常数 0 填充空值
df_fillna = df.fillna(0)

print(df_fillna)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  0.0  10
2  0.0  0.0  11
3  4.0  8.0  12
用均值填充空值

下面的代码用每列的均值来填充空值:

# 用均值填充空值
df_fillna_mean = df.fillna(df.mean())

print(df_fillna_mean)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  6.5  10
2  2.333333  6.5  11
3  4.0  8.0  12
用中位数填充空值

下面的代码用每列的中位数来填充空值:

# 用中位数填充空值
df_fillna_median = df.fillna(df.median())

print(df_fillna_median)

输出:

     A    B   C
0  1.0  5.0   9
1  2.0  6.5  10
2  2.0  6.5  11
3  4.0  8.0  12