Python学习计划——7.1数据清洗与预处理

数据清洗与预处理是数据分析的重要步骤,旨在提高数据质量和分析结果的可靠性。常见的数据清洗任务包括处理缺失值、重复数据、异常值、数据类型转换等。以下是详细的讲解和可运行的Python案例。

1. 处理缺失值

缺失值是数据清洗中常见的问题,可以通过删除含有缺失值的行或列、填充缺失值等方法处理。

示例
import pandas as pd
import numpy as np

# 创建包含缺失值的数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', np.nan],
        'Age': [25, np.nan, 35, 45, 55],
        'City': ['New York', 'Los Angeles', np.nan, 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

# 删除包含缺失值的行
df_dropna = df.dropna()
print("\n删除缺失值后的数据:")
print(df_dropna)

# 填充缺失值
df_fillna = df.fillna({'Name': 'Unknown', 'Age': df['Age'].mean(), 'City': 'Unknown'})
print("\n填充缺失值后的数据:")
print(df_fillna)
2. 处理重复数据

重复数据会影响分析结果的准确性,可以通过删除重复数据来处理。

示例
# 创建包含重复值的数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
        'Age': [25, 30, 35, 45, 25],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Chicago', 'New York']}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 删除重复行
df_dedup = df.drop_duplicates()
print("\n删除重复值后的数据:")
print(df_dedup)
3. 处理异常值

异常值是偏离大多数数据点的值,可能是数据录入错误或真实存在的极端值。可以使用统计方法或可视化手段识别和处理异常值。

示例
import matplotlib.pyplot as plt

# 创建包含异常值的数据帧
data = {'Value': [10, 12, 12, 13, 15, 100, 12, 11, 13, 12]}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 使用箱线图识别异常值
plt.boxplot(df['Value'])
plt.title("Boxplot of Values")
plt.show()

# 删除异常值
q1 = df['Value'].quantile(0.25)
q3 = df['Value'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
df_no_outliers = df[(df['Value'] >= lower_bound) & (df['Value'] <= upper_bound)]
print("\n删除异常值后的数据:")
print(df_no_outliers)
4. 数据类型转换

数据类型不匹配会导致数据处理和分析时出现错误,可以通过类型转换解决这个问题。

示例
# 创建包含数据类型不匹配的数据帧
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': ['25', '30', '35'],
        'Salary': ['50000', '60000', '70000']}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 转换数据类型
df['Age'] = df['Age'].astype(int)
df['Salary'] = df['Salary'].astype(float)
print("\n转换数据类型后的数据:")
print(df.dtypes)
print(df)
5. 可运行的Python案例

下面是一个完整的Python程序,演示了数据清洗与预处理的基本操作,包括处理缺失值、重复数据、异常值和数据类型转换。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 1. 处理缺失值
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', np.nan],
        'Age': [25, np.nan, 35, 45, 55],
        'City': ['New York', 'Los Angeles', np.nan, 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

# 删除包含缺失值的行
df_dropna = df.dropna()
print("\n删除缺失值后的数据:")
print(df_dropna)

# 填充缺失值
df_fillna = df.fillna({'Name': 'Unknown', 'Age': df['Age'].mean(), 'City': 'Unknown'})
print("\n填充缺失值后的数据:")
print(df_fillna)

# 2. 处理重复数据
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],
        'Age': [25, 30, 35, 45, 25],
        'City': ['New York', 'Los Angeles', 'Chicago', 'Chicago', 'New York']}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 删除重复行
df_dedup = df.drop_duplicates()
print("\n删除重复值后的数据:")
print(df_dedup)

# 3. 处理异常值
data = {'Value': [10, 12, 12, 13, 15, 100, 12, 11, 13, 12]}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 使用箱线图识别异常值
plt.boxplot(df['Value'])
plt.title("Boxplot of Values")
plt.show()

# 删除异常值
q1 = df['Value'].quantile(0.25)
q3 = df['Value'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
df_no_outliers = df[(df['Value'] >= lower_bound) & (df['Value'] <= upper_bound)]
print("\n删除异常值后的数据:")
print(df_no_outliers)

# 4. 数据类型转换
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': ['25', '30', '35'],
        'Salary': ['50000', '60000', '70000']}
df = pd.DataFrame(data)
print("\n原始数据:")
print(df)

# 转换数据类型
df['Age'] = df['Age'].astype(int)
df['Salary'] = df['Salary'].astype(float)
print("\n转换数据类型后的数据:")
print(df.dtypes)
print(df)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值