📅  最后修改于: 2023-12-03 15:37:25.652000             🧑  作者: Mango
当使用 pandas 处理数据时,经常遇到需要删除数据框中的空值(NaN)的情况。这些 NaN 值可能是由于数据采集或转换过程中的缺失值或错误值产生的。在 pandas 中有多个选项可以删除 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
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
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
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