一文教你如何利用 Python 进行数据清洗

开发 后端
本文介绍了如何使用 Python 进行数据清洗,通过一个实战案例,我们详细展示了如何处理电商用户数据。

数据清洗是数据分析中非常重要的一步,它可以帮助我们处理不完整、不准确或不一致的数据。今天,我们就来聊聊如何用 Python 进行数据清洗。Python 有强大的库如 Pandas 和 NumPy,它们提供了丰富的工具来帮助我们高效地完成数据清洗任务。

导入必要的库

首先,我们需要导入一些常用的库,比如 Pandas 和 NumPy。Pandas 是一个强大的数据处理库,NumPy 则主要用于数值计算。

import pandas as pd
import numpy as np

读取数据

假设我们有一个 CSV 文件 data.csv,我们可以使用 Pandas 的 read_csv 函数来读取数据。

# 读取 CSV 文件
df = pd.read_csv('data.csv')

# 查看前 5 行数据
print(df.head())

检查数据基本信息

在开始清洗数据之前,我们需要了解数据的基本信息,包括数据的形状、列名、数据类型等。

# 查看数据形状
print(f"数据形状: {df.shape}")

# 查看列名
print(f"列名: {df.columns.tolist()}")

# 查看数据类型
print(f"数据类型: \n{df.dtypes}")

处理缺失值

缺失值是数据清洗中常见的问题。我们可以使用 isnull() 和 notnull() 函数来检查缺失值,并使用 fillna() 或 dropna() 来处理它们。

# 检查缺失值
print(df.isnull().sum())

# 填充缺失值
df['age'].fillna(df['age'].mean(), inplace=True)  # 用平均值填充年龄列的缺失值
df['income'].fillna(0, inplace=True)  # 用 0 填充收入列的缺失值

# 删除含有缺失值的行
df.dropna(subset=['address'], inplace=True)  # 删除地址列中含有缺失值的行

处理重复值

重复值可能会导致分析结果失真。我们可以使用 duplicated() 和 drop_duplicates() 函数来检测和删除重复值。

# 检查重复值
print(df.duplicated().sum())

# 删除重复值
df.drop_duplicates(inplace=True)

数据类型转换

有时候,数据的类型可能不符合我们的需求。我们可以使用 astype() 函数来转换数据类型。

# 将 age 列转换为整数类型
df['age'] = df['age'].astype(int)

# 将 income 列转换为浮点数类型
df['income'] = df['income'].astype(float)

处理异常值

异常值可能会对分析结果产生重大影响。我们可以使用统计方法(如 Z-score)或箱线图来检测和处理异常值。

# 使用 Z-score 方法检测异常值
from scipy import stats
z_scores = np.abs(stats.zscore(df['income']))
df = df[z_scores < 3]  # 保留 Z-score 小于 3 的数据

# 使用箱线图方法检测异常值
Q1 = df['income'].quantile(0.25)
Q3 = df['income'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['income'] >= lower_bound) & (df['income'] <= upper_bound)]

标准化和归一化

在某些情况下,我们可能需要对数据进行标准化或归一化处理,以便更好地进行模型训练。

# 标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

# 归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

保存清洗后的数据

最后,我们将清洗后的数据保存到一个新的 CSV 文件中,以便后续使用。

# 保存清洗后的数据
df.to_csv('cleaned_data.csv', index=False)

实战案例:处理电商用户数据

假设我们有一个电商用户的 CSV 文件 users.csv,包含用户的年龄、收入、地址等信息。我们需要对其进行数据清洗,以确保数据的质量。

步骤 1:读取数据

# 读取 CSV 文件
df = pd.read_csv('users.csv')

# 查看前 5 行数据
print(df.head())

步骤 2:检查数据基本信息

# 查看数据形状
print(f"数据形状: {df.shape}")

# 查看列名
print(f"列名: {df.columns.tolist()}")

# 查看数据类型
print(f"数据类型: \n{df.dtypes}")

步骤 3:处理缺失值

# 检查缺失值
print(df.isnull().sum())

# 填充缺失值
df['age'].fillna(df['age'].mean(), inplace=True)  # 用平均值填充年龄列的缺失值
df['income'].fillna(0, inplace=True)  # 用 0 填充收入列的缺失值

# 删除含有缺失值的行
df.dropna(subset=['address'], inplace=True)  # 删除地址列中含有缺失值的行

步骤 4:处理重复值

# 检查重复值
print(df.duplicated().sum())

# 删除重复值
df.drop_duplicates(inplace=True)

步骤 5:数据类型转换

# 将 age 列转换为整数类型
df['age'] = df['age'].astype(int)

# 将 income 列转换为浮点数类型
df['income'] = df['income'].astype(float)

步骤 6:处理异常值

# 使用 Z-score 方法检测异常值
z_scores = np.abs(stats.zscore(df['income']))
df = df[z_scores < 3]  # 保留 Z-score 小于 3 的数据

# 使用箱线图方法检测异常值
Q1 = df['income'].quantile(0.25)
Q3 = df['income'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['income'] >= lower_bound) & (df['income'] <= upper_bound)]

步骤 7:保存清洗后的数据

# 保存清洗后的数据
df.to_csv('cleaned_users.csv', index=False)

总结

本文介绍了如何使用 Python 进行数据清洗,包括导入必要的库、读取数据、检查数据基本信息、处理缺失值、处理重复值、数据类型转换、处理异常值、标准化和归一化,以及保存清洗后的数据。通过一个实战案例,我们详细展示了如何处理电商用户数据。

责任编辑:赵宁宁 来源: 小白PythonAI编程
相关推荐

2024-11-20 16:12:31

Python图像处理计算机视觉

2024-11-20 16:42:03

Python科学计算

2024-11-18 17:16:18

Python性能优化编程

2023-05-05 19:29:41

2022-09-05 07:32:46

mock数据Stream

2021-12-07 06:02:15

Redis Docker运维

2020-03-23 10:06:05

工具代码开发

2023-12-27 07:40:43

HTTP服务器负载均衡

2022-02-20 09:56:28

TCPIP网络协议

2023-07-31 21:56:54

哨兵系统redis

2021-01-15 13:18:39

数据模型领域模型代码

2024-10-28 12:57:36

Pandas数据清洗

2020-12-22 10:02:53

ZabbixMySQL数据库

2019-07-23 07:30:16

2023-05-05 19:16:22

Python数据清洗

2023-05-11 08:26:56

2021-08-10 05:49:10

网络协议C语言Linux操作

2022-03-28 14:08:02

Python数据清洗数据集

2021-07-27 15:40:39

Python数据清洗函数

2022-08-26 07:02:57

Python工具分割
点赞
收藏

51CTO技术栈公众号