📅  最后修改于: 2023-12-03 15:33:24.273000             🧑  作者: Mango
在数据分析中,异常值(outlier)是一些与其它观测值不同的、可能有误或不合理的值。处理异常值是重要的数据清理步骤之一,因为它们可能会严重影响数据的分析结果。在Python中,Pandas是处理数据分析的最流行的工具之一,Pandas提供了多种方法来删除异常值。
在删除异常值之前,我们需要先检测它们。我们可以用Pandas中的describe()方法来检测数据中的异常值。describe()方法会返回数据的统计信息,包括均值、标准差、最小值、最大值、中位数等。
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# 使用describe()方法来检测数据中的异常值
print(data.describe())
输出:
age height weight
count 10000.0000 10000.0000 10000.0000
mean 38.9060 168.3226 72.0500
std 8.3652 9.7586 14.9469
min 18.0000 140.0000 40.0000
25% 33.0000 161.0000 62.0000
50% 39.0000 168.0000 72.0000
75% 45.0000 175.0000 82.0000
max 60.0000 200.0000 120.0000
在检测完异常值之后,我们可以用Pandas中的drop()方法来删除它们。drop()方法会删除数据中指定的行或列。
假设我们现在要删除年龄和身高的异常值,假设我们认为年龄小于20或大于60,身高小于150或大于190都是异常值,我们可以用如下代码来删除它们:
# 删除年龄和身高的异常值
data = data.drop(data[(data.age < 20) | (data.age > 60)].index)
data = data.drop(data[(data.height < 150) | (data.height > 190)].index)
# 检查删除异常值之后的数据
print(data.describe())
输出:
age height weight
count 9399.0000 9399.0000 9399.0000
mean 39.0038 168.2365 72.1735
std 8.3345 9.2255 14.8465
min 20.0000 150.0000 40.0000
25% 33.0000 161.0000 62.0000
50% 39.0000 168.0000 72.0000
75% 45.0000 175.0000 82.0000
max 60.0000 190.0000 120.0000
如果数据中包含文本类型的异常值,我们可以用Pandas中的replace()方法将它们替换成NaN,然后用dropna()方法删除它们。
# 将Gender列中的异常值替换成NaN
data['Gender'] = data['Gender'].replace(['M', 'F', '?'], [0, 1, np.nan])
# 删除Gender列中的NaN值
data = data.dropna(subset=['Gender'])
# 检查删除异常值之后的数据
print(data.describe())
输出:
age height weight Gender
count 9398.0000 9398.00000 9398.00000 9398.000
mean 39.0038 168.23652 72.17405 0.500
std 8.3346 9.22541 14.84653 0.500
min 20.0000 150.00000 40.00000 0.000
25% 33.0000 161.00000 62.00000 0.000
50% 39.0000 168.00000 72.00000 0.500
75% 45.0000 175.00000 82.00000 1.000
max 60.0000 190.00000 120.00000 1.000