Pandas数据清洗是确保数据质量的关键步骤,可以有效处理缺失值、重复数据和异常值。
在Python的Pandas库中,DataFrame是一个非常重要的数据结构,用于处理表格数据。它类似于Excel电子表格或SQL数据库中的表,可以存储不同类型的列数据,包括数字、字符串、布尔值等。
处理缺失值
为空、null、NULL、None、NaN、#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)
在Pandas库中,dropna() 函数用于删除包含缺失值的行或列,常用参数如下:
-
how 参数
how="any"当行或列中包含缺失值,则删除行或列。how="all"当行或列中全为缺失值,则删除行或列。 -
axis 参数
axis=0或axis=index删除行axis=1或axis=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