📜  pandas 删除异常值 - Python (1)

📅  最后修改于: 2023-12-03 15:33:24.273000             🧑  作者: Mango

Pandas 删除异常值 - Python

在数据分析中,异常值(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