pandas 清洗技巧(处理缺失值)

135 阅读4分钟

Pandas数据清洗是确保数据质量的关键步骤,可以有效处理缺失值、重复数据和异常值。

在Python的Pandas库中,DataFrame是一个非常重要的数据结构,用于处理表格数据。它类似于Excel电子表格或SQL数据库中的表,可以存储不同类型的列数据,包括数字、字符串、布尔值等。

处理缺失值

nullNULLNoneNaN#N/A的值,都被认定为是缺失值。

在数据集中,缺失值(NaN)是常见的现象。缺失值的处理是数据清洗中的重要部分,因为它们可能影响数据的准确性。

常见的处理方法包括:删除含有缺失值的行或列,或者 使用特定值填充缺失值。

1. 删除缺失值

# 导入 pandas 库
import pandas as pd

# 读取 data.xlsx 表格的数据,缓存在 dateframe 对象中
df = pd.read_excel("/Users/caidong/Desktop/data.xlsx", sheet_name="Sheet1")
print("删除缺失值前:")
print(df)

# 删除包含 NaN 缺失值的行
df_cleared = pd.dropna(how="any", axis=0)
print("\n删除缺失值后:")
print(df_cleaned)

image.png

在Pandas库中,dropna() 函数用于删除包含缺失值的行或列,常用参数如下:

  • how 参数

    how="any" 当行或列中包含缺失值,则删除行或列。

    how="all" 当行或列中全为缺失值,则删除行或列。

  • axis 参数

    axis=0axis=index 删除行

    axis=1axis=columns 删除列

  • inplace 参数

    布尔值,表示是否在原地修改DataFrame,而不是返回一个新的DataFrame。如果设置为 True,则原地修改,不返回新的DataFrame。


2. 填充缺失值

缺失值的填充方式包括:

  • fillna() 固定值填充

  • ffill() 向前填充,使用前一个非缺失值来填充缺失值。

  • bfill() 向后填充,使用后一个非缺失值来填充缺失值。

# 导入 pandas 库
import pandas as pd

# 读取 data.xlsx 表格的数据,缓存在 dateframe 对象中
df = pd.read_excel('/Users/caidong/Desktop/data.xlsx', sheet_name='Sheet3')
print("删除缺失值前:")
print(df)

# 固定值填充缺失值
df_filled = df.fillna(0)
print("\n使用固定值填充后:")
print(df_filled)

# 向前填充缺失值
df_ffilled = df.ffill()
print("\n使用向前填充后:")
print(df_ffilled)

# 向后填充缺失值
df_bfilled = df.bfill()
print("\n使用向后填充后:")
print(df_bfilled)
删除缺失值前:
   姓名   序号  年龄  出身日期  性别 地址
0   1    @  11   2.0   1  a
1   2    @  12   NaN   1  a
2   3    @  13   NaN   1  a
3   4    @  14   NaN   1  a
4   5    @  15   NaN   1  a
5   6    @  16   NaN   1  a
6   7  NaN  17   3.0   1  a
7   8    @  18   4.0   1  a

使用固定值填充后:
   姓名 序号  年龄  出身日期  性别 地址
0   1  @  11   2.0   1  a
1   2  @  12   0.0   1  a
2   3  @  13   0.0   1  a
3   4  @  14   0.0   1  a
4   5  @  15   0.0   1  a
5   6  @  16   0.0   1  a
6   7  0  17   3.0   1  a
7   8  @  18   4.0   1  a

使用向前填充后:
   姓名 序号  年龄  出身日期  性别 地址
0   1  @  11   2.0   1  a
1   2  @  12   2.0   1  a
2   3  @  13   2.0   1  a
3   4  @  14   2.0   1  a
4   5  @  15   2.0   1  a
5   6  @  16   2.0   1  a
6   7  @  17   3.0   1  a
7   8  @  18   4.0   1  a

使用向后填充后:
   姓名 序号  年龄  出身日期  性别 地址
0   1  @  11   2.0   1  a
1   2  @  12   3.0   1  a
2   3  @  13   3.0   1  a
3   4  @  14   3.0   1  a
4   5  @  15   3.0   1  a
5   6  @  16   3.0   1  a
6   7  @  17   3.0   1  a
7   8  @  18   4.0   1  a



对不同列的缺失值填充不同的值,比如用0填充年龄列的缺失值,用Unknown填充姓名列的缺失值。

# 导入 pandas 库
import pandas as pd

# 读取 data.xlsx 表格的数据,缓存在 dateframe 对象中
df = pd.read_excel('/Users/caidong/Desktop/data.xlsx', sheet_name='Sheet3')
print("删除缺失值前:")
print(df)

# 用`0`填充`年龄`列的缺失值,用`Unknown`填充`姓名`列的缺失值
df_filled = df.fillna(value={'姓名': 'Unknown', '年龄': 0})
print("\n填充后:")
print(df_filled)
删除缺失值前:
    姓名 序号    年龄  出身日期  性别 地址
0  1.0  @  11.0   2.0   1  a
1  2.0  @  12.0   NaN   1  a
2  3.0  @   NaN   NaN   1  a
3  NaN  @   NaN   NaN   1  a
4  5.0  @  15.0   NaN   1  a
5  6.0  @  16.0   NaN   1  a
6  7.0  @  17.0   3.0   1  a
7  8.0  @  18.0   4.0   1  a

填充后:
        姓名 序号    年龄  出身日期  性别 地址
0      1.0  @  11.0   2.0   1  a
1      2.0  @  12.0   NaN   1  a
2      3.0  @   0.0   NaN   1  a
3  Unknown  @   0.0   NaN   1  a
4      5.0  @  15.0   NaN   1  a
5      6.0  @  16.0   NaN   1  a
6      7.0  @  17.0   3.0   1  a
7      8.0  @  18.0   4.0   1  a