数据清洗的具体步骤

  1. 处理缺失值
  2. 去除重复数据
  3. 修正数据格式
  4. 处理异常值
  5. 标准化和归一化
  6. 处理不一致的数据
  7. 转换数据类型
  8. 数据集成

数据集基本信息

import os
import pandas as pd

def analyze_csv_files():
# 获取当前目录下的所有 CSV 文件
csv_files = [f for f in os.listdir('.') if f.endswith('.csv')]

if not csv_files:
print("当前目录下没有找到 CSV 文件。")
return

print(f"找到 {len(csv_files)} 个 CSV 文件:{csv_files}\n")

for file in csv_files:
print(f"分析文件: {file}")
df = pd.read_csv(file)

# 显示列名与数据概览
print("列名:", df.columns.tolist())
print("数据概览:")
print(df.info())

# 统计信息
print("数值列统计信息:")
print(df.describe())

# 显示前 5 行数据
print("前 5 行数据:")
print(df.head())

# 缺失值统计
print("缺失值统计:")
print(df.isnull().sum())

print("-" * 50, "\n")

if __name__ == "__main__":
analyze_csv_files()

数据清洗的具体方法和示例

处理缺失值

方法:

  • 删除缺失值:适用于缺失值较少且随机分布的情况。
  • 填补缺失值:使用均值、中位数、众数填补,或使用插值、回归等方法填补。
  • 标记缺失值:用特定值(如 -1 或 “Unknown”)标记缺失数据。
import pandas as pd
import numpy as np

# 创建示例数据集
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, np.nan, 30, np.nan, 22],
'Department': ['HR', 'Finance', 'IT', 'Marketing', 'IT']
}
df = pd.DataFrame(data)

# 填补缺失值 - 使用均值填补
df['Age'].fillna(df['Age'].mean(), inplace=True)
print(df)

去除重复数据

方法:

  • 去除完全重复的行:删除所有列值都相同的重复行。
  • 去除部分重复的行:根据特定列(如ID或名称)去除重复行。
# 创建示例数据集
data = {
'OrderID': [1, 2, 2, 3, 4],
'Product': ['A', 'B', 'B', 'C', 'D'],
'Quantity': [1, 2, 2, 1, 3]
}
df = pd.DataFrame(data)

# 去除重复行
df.drop_duplicates(inplace=True)
print(df)

修正数据格式

方法:

  • 转换数据格式:将日期、时间、货币等字段转换为统一格式。
  • 去除空白和特殊字符:清理字符串中的多余空格和特殊字符。
# 创建示例数据集
data = {
'Date': ['2021-01-01', '01/02/2021', '2021.03.03', '2021-04-04']
}
df = pd.DataFrame(data)

# 统一日期格式
df['Date'] = pd.to_datetime(df['Date'])
print(df)

处理异常值

方法:

  • 去除异常值:删除明显的异常数据。
  • 替换异常值:使用合理的数值替换异常值。
  • 标记异常值:标记异常数据以便进一步分析。
# 创建示例数据集
data = {
'Product': ['A', 'B', 'C', 'D', 'E'],
'Sales': [100, 200, 3000, 400, 500] # 3000 是异常值
}
df = pd.DataFrame(data)

# 去除异常值 - 使用四分位数法去除异常值
Q1 = df['Sales'].quantile(0.25)
Q3 = df['Sales'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

df = df[(df['Sales'] >= lower_bound) & (df['Sales'] <= upper_bound)]
print(df)

标准化和归一化

方法:

  • 标准化:将数据转换为均值为0、标准差为1的标准正态分布。
  • 归一化:将数据缩放到特定范围(如0到1)。
from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 创建示例数据集
data = {
'Feature1': [10, 20, 30, 40, 50],
'Feature2': [1, 2, 3, 4, 5]
}
df = pd.DataFrame(data)

# 标准化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

# 归一化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)

print("Standardized Data:")
print(df_standardized)
print("\nNormalized Data:")
print(df_normalized)

处理不一致的数据

方法:

  • 统一数据格式和标准:统一度量单位、编码方式等。
  • 合并相同类别:将表示同一类别的不同标签合并。
# 创建示例数据集
data = {
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Department': ['HR', 'Finance', 'IT', 'marketing', 'it']
}
df = pd.DataFrame(data)

# 统一部门名称
df['Department'] = df['Department'].str.lower().replace({'marketing': 'it'})
print(df)

转换数据类型

方法:

  • 转换数据类型:将数值型字符串转换为数值类型,日期字符串转换为日期类型等。
# 创建示例数据集
data = {
'Value': ['1', '2', '3', '4', '5']
}
df = pd.DataFrame(data)

# 转换数据类型
df['Value'] = df['Value'].astype(int)
print(df)

数据集成

方法:

  • 合并数据集:将多个数据源整合成一个完整的数据集。
  • 连接数据表:根据主键或外键进行表连接。
# 创建示例数据集
data1 = {
'EmployeeID': [1, 2, 3],
'Name': ['Alice', 'Bob', 'Charlie'],
'DepartmentID': [101, 102, 101]
}
data2 = {
'DepartmentID': [101, 102],
'DepartmentName': ['HR', 'Finance']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 合并数据集
df_merged = pd.merge(df1, df2, on='DepartmentID')
print(df_merged)