最全总结!Pandas 十大清洗技巧(上)
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
精彩评论
评论

暂无匹配数据
全部评论