编写一个程序,对供应链数据进行预处理,包括缺失值处理、异常值检测等。
输入:
包含缺失值和异常值的供应链数据
输出:
处理后的干净数据
要求:
1. 使用Pandas的isnull()和sum()方法识别并统计缺失值
2. 根据数据类型选择合适的填充方法:数值型数据使用均值或中位数,分类型数据使用众数
3. 使用IQR方法检测异常值
import pandas as pd
import numpy as np
# 创建示例数据
data = {
'product_id': [1, 2, 3, 4, 5, 6],
'demand': [100, 120, np.nan, 150, 200, 1000],
'lead_time': [7, 8, 6, np.nan, 9, 8],
'supplier': ['A', 'B', 'A', 'C', 'B', 'A']
}
df = pd.DataFrame(data)
# 识别缺失值
print("缺失值统计:")
print(df.isnull().sum())
# 处理缺失值
df['demand'] = df['demand'].fillna(df['demand'].mean())
df['lead_time'] = df['lead_time'].fillna(df['lead_time'].median())
# 检测异常值(IQR方法
Q1 = df['demand'].quantile(0.25)
Q3 = df['demand'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['demand'] < lower) | (df['demand'] > upper)]
print("\n检测到的异常值:")
print(outliers)
# 处理异常值(截断)
df['demand'] = df['demand'].clip(lower, upper)
print("\n处理后的数据:")
print(df)