最全总结!Pandas 十大清洗技巧(上)

头像u101405   创建 于 06月26日 阅读次数 10

Pandas 十大数据清洗技巧有:

1.处理缺失值

主要功能

在数据集中,缺失值(NaN)是常见的现象。缺失值的处理是数据清洗中的重要部分,因为它们可能影响模型的性能。常见的处理方法包括删除含有缺失值的行或列,或者使用特定值填充缺失值。

Python实现

删除缺失值

使用dropna()方法可以删除包含NaN的行或列。通过设置参数axis=0或axis=1,可以分别删除行或列。

import pandas as pd

data = {'Name': ['Tom', 'Jerry', 'Spike', None],
        'Age': [20, 21, None, 22],
        'City': ['New York', None, 'Chicago', 'Boston']}

df = pd.DataFrame(data)

# 删除包含NaN的行
df_cleaned = df.dropna()
print(df_cleaned)
输出:
Name   Age     City
0   Tom  20.0  New York
填充缺失值
使用fillna()方法可以填充缺失值,常见填充方式包括使用固定值、前向填充(ffill)或后向填充(bfill)。
# 填充缺失值为0
df_filled = df.fillna(0)
print(df_filled)

# 前向填充
df_ffill = df.fillna(method='ffill')
print(df_ffill)
输出:
Name   Age     City
0   Tom  20.0  New York
1 Jerry  21.0        0
2 Spike   0.0  Chicago
3     0  22.0   Boston
Name   Age     City
0   Tom  20.0  New York
1 Jerry  21.0  New York
2 Spike  21.0  Chicago
3 Spike  22.0   Boston

2.处理重复数据

主要功能

重复数据会导致模型的偏差和冗余信息。Pandas提供了检测和删除重复数据的功能。

Python实现

检测重复数据

使用duplicated()方法可以检测重复行,返回一个布尔序列,表示每行是否为重复项。

data = {'Name': ['Tom', 'Jerry', 'Spike', 'Tom'],
        'Age': [20, 21, 21, 20],
        'City': ['New York', 'Boston', 'Chicago', 'New York']}

df = pd.DataFrame(data)

# 检测重复行
print(df.duplicated())
输出:
0    False
1    False
2    False
3     True
dtype: bool
删除重复数据
使用drop_duplicates()方法删除重复行,可以保留首次出现的行或最后一次出现的行。
# 删除重复行
df_cleaned = df.drop_duplicates()
print(df_cleaned)
输出:
Name  Age     City
0   Tom   20  New York
1 Jerry   21   Boston
2 Spike   21  Chicago

3.数据类型转换

主要功能

不同的数据类型(如整数、浮点数、字符串)在模型训练时有不同的处理方式。有时需要将数据转换为适当的数据类型以符合模型的要求或简化计算。

Python实现

转换数据类型

使用astype()方法可以将某一列转换为指定类型,例如将字符串转换为整数。

data = {'Name': ['Tom', 'Jerry', 'Spike'],
        'Age': ['20', '21', '22'],
        'Salary': [3000.5, 3200.0, 3150.75]}

df = pd.DataFrame(data)

# 将Age列从字符串转换为整数
df['Age'] = df['Age'].astype(int)
print(df.dtypes)
输出:
Name       object
Age         int64
Salary    float64
dtype: object

4.处理异常值

主要功能

异常值(outliers)是显著偏离正常数据范围的数据点,它们可能会显著影响模型的表现。通常需要识别并处理这些异常值。

Python实现

使用描述性统计

使用describe()方法可以查看数据的基本统计信息,包括均值、中位数、标准差等,这可以帮助识别异常值。

data = {'Name': ['Tom', 'Jerry', 'Spike', 'Butch'],
        'Age': [20, 21, 22, 100],
        'Salary': [3000.5, 3200.0, 3150.75, 40000]}

df = pd.DataFrame(data)

# 查看描述性统计
print(df['Age'].describe())
输出:
count      4.000000
mean      40.750000
std       38.891088
min       20.000000
25%       20.750000
50%       21.500000
75%       41.500000
max      100.000000
Name: Age, dtype: float64
从输出中可以看到,Age列中的最大值100明显是一个异常值。
通过条件过滤移除异常值
可以根据具体条件过滤掉异常值,例如仅保留Age在合理范围内的记录。
# 过滤掉Age大于60的行
df_filtered = df[df['Age'] <= 60]
print(df_filtered)
输出:
Name  Age   Salary
0   Tom   20  3000.50
1 Jerry   21  3200.00
2 Spike   22  3150.75

5.数据标准化与归一化

主要功能

在机器学习中,数据标准化(Standardization)和归一化(Normalization)是常用的预处理步骤,特别是在涉及距离计算或梯度下降的算法中。这些步骤有助于消除数据中的量纲影响,使模型训练更加稳定和高效。

Python实现

数据标准化

标准化通常将数据调整为均值为0,标准差为1的分布。可以手动进行,也可以使用sklearn.preprocessing模块中的StandardScaler。

from sklearn.preprocessing import StandardScaler

data = {'Feature1': [1.0, 2.0, 3.0, 4.0, 5.0],
        'Feature2': [100, 150, 200, 250, 300]}

df = pd.DataFrame(data)

scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print(df_scaled)
输出:
 Feature1  Feature2
0 -1.414214 -1.414214
1 -0.707107 -0.707107
2  0.000000  0.000000
3  0.707107  0.707107
4  1.414214  1.414214
数据归一化
 归一化通常将数据缩放到0-1之间。可以使用min-max方法来实现。
df_normalized = (df - df.min()) / (df.max() - df.min())
print(df_normalized)
输出:
 Feature1  Feature2
0       0.0       0.0
1       0.25      0.25
2       0.5       0.5
3       0.75      0.75
4       1.0       1.0



点赞
收藏
分享
打赏
精彩评论
评论
全部评论
logo