让我们通过几个案例来学习如何使用Pandas进行数据清洗和预处理,包括处理缺失值、异常值,进行数据转换和规范化,以及处理重复数据等操作。
处理缺失值:
# 创建包含缺失值的DataFrame
data = {
'姓名': ['张三', '李四', None, '赵六'],
'年龄': [18, 19, None, 20],
'性别': ['男', '女', '男', '女'],
'分数': [90, None, 95, 80]
}
df = pd.DataFrame(data)
# 检测缺失值
print(df.isnull())
# 删除包含缺失值的行
df_dropna = df.dropna()
print(df_dropna)
# 使用指定值填充缺失值
df_fillna = df.fillna(0)
print(df_fillna)
处理异常值:
# 创建包含异常值的DataFrame
data = {
'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [18, -10, 17, 20],
'性别': ['男', '女', '男', '女'],
'分数': [90, 85, 105, 80]
}
df = pd.DataFrame(data)
# 检测异常值
age_outliers = df[(df['年龄'] < 0) | (df['年龄'] > 100)]
print(age_outliers)
score_outliers = df[(df['分数'] < 0) | (df['分数'] > 100)]
print(score_outliers)
# 替换异常值
df.loc[df['年龄'] < 0, '年龄'] = 18
df.loc[df['分数'] < 0, '分数'] = 0
print(df)
数据转换和规范化:
# 将姓名列转换为大写
df['姓名'] = df['姓名'].str.upper()
print(df)
# 将分数归一化到0-1之间
df['分数_normalized'] = (df['分数'] - df['分数'].min()) / (df['分数'].max() - df['分数'].min())
print(df)
# 使用字典映射进行数据规范化
gender_mapping = {'男': 1, '女': 0}
df['性别_encoded'] = df['性别'].map(gender_mapping)
print(df)
处理重复数据:
# 创建包含重复数据的DataFrame
data = {
'姓名': ['张三', '李四', '王五', '张三'],
'年龄': [18, 19, 17, 20],
'性别': ['男', '女', '男', '男'],
'分数': [90, 85, 95, 80]
}
df = pd.DataFrame(data)
# 检测重复行
duplicate_rows = df.duplicated()
print(duplicate_rows)
# 删除重复行
df_drop_duplicates = df.drop_duplicates()
print(df_drop_duplicates)
通过这些案例,您可以学习如何使用Pandas提供的函数和方法来处理数据清洗和预处理的任务。这些操作可以帮助您处理缺失值、异常值,进行数据转换和规范化,并处理重复数据,使数据适合后续的分析和建模。掌握这些技巧可以提高数据质量和准确性,从而得到更可靠的分析结果。您可以根据实际需求在项目中应用这些技术。