数据清洗:Pandas数据处理入门
学习目标
本课程将引导学员了解数据清洗的基本概念,掌握使用Pandas库处理数据集中的缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。
相关知识点
- Pandas数据清洗
学习内容
1 Pandas数据清洗
1.1 处理缺失值
在数据处理中,缺失值是一个常见的问题。缺失值可能由多种原因造成,如数据收集过程中的错误、数据录入时的遗漏等。处理缺失值的方法有很多,包括删除含有缺失值的行或列、填充缺失值等。Pandas库提供了多种处理缺失值的函数,使得这一过程变得简单高效。
1.1.1 检测缺失值
在处理缺失值之前,首先需要检测数据集中哪些位置存在缺失值。Pandas中的isnull()
函数可以用来检测数据集中的缺失值,返回一个布尔值的DataFrame,其中True表示该位置存在缺失值,False表示该位置数据完整。
import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)# 检测缺失值
missing_values = df.isnull()
print(missing_values)
1.1.2 删除缺失值
如果数据集中的缺失值较少,且删除这些缺失值不会对分析结果产生显著影响,可以考虑删除含有缺失值的行或列。Pandas中的dropna()
函数可以用来删除含有缺失值的行或列。
import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)
# 删除含有缺失值的行
df_cleaned = df.dropna()
print(df_cleaned)# 删除含有缺失值的列
df_cleaned_columns = df.dropna(axis=1)
print(df_cleaned_columns)
1.1.3 填充缺失值
在某些情况下,删除含有缺失值的行或列可能会导致数据集的样本量大幅减少,影响分析结果的准确性。此时,可以考虑使用填充的方法来处理缺失值。Pandas中的fillna()
函数可以用来填充缺失值,常见的填充方法包括使用固定值、前向填充、后向填充等。
import pandas as pd# 创建一个包含缺失值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', None],'Age': [25, 30, None, 35, 40],'Salary': [50000, 60000, 70000, None, 80000]}
df = pd.DataFrame(data)
print("===================")
# 使用固定值填充缺失值
df_filled = df.fillna(0)
print(df_filled)
print("===================")
# 使用前向填充(csdn的运行环境可能有问题,到自己本地执行!)
df_ffilled = df.fillna(method='ffill')
print(df_ffilled)
print("===================")
# 使用后向填充(csdn的运行环境可能有问题,到自己本地执行!)
df_bfilled = df.fillna(method='bfill')
print(df_bfilled)
- 前向填充(ffill):df.fillna(method=‘ffill’) 会使用当前缺失值的前一个非缺失值来填充该缺失值。可以理解为
“向前看”,用前面的有效值延续下来。 例如,如果某列数据是[1, NaN, 3],前向填充后会变为[1, 1, 3]。- 后向填充(bfill):df.fillna(method=‘bfill’) 会使用当前缺失值的后一个非缺失值来填充该缺失值。可以理解为
“向后看”,用后面出现的有效值往前补充。 例如,如果某列数据是[1, NaN, 3],后向填充后会变为[1, 3, 3]。
这两种方法适用于有连续性的数据(如时间序列),能保留数据的趋势性,但如果缺失值位于开头(前向填充)或结尾(后向填充),则可能无法被填充。
1.2 处理重复数据
重复数据是指数据集中存在完全相同的记录。重复数据可能会导致数据分析结果的偏差,因此在数据清洗过程中需要特别注意。Pandas提供了duplicated()
和drop_duplicates()
函数来检测和删除重复数据。
1.2.1 检测重复数据
使用duplicated()
函数可以检测数据集中是否存在重复的记录。该函数返回一个布尔值的Series,其中True表示该行是重复的,False表示该行是唯一的。
import pandas as pd# 创建一个包含重复数据的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],'Age': [25, 30, 35, 40, 25],'Salary': [50000, 60000, 70000, 80000, 50000]}
df = pd.DataFrame(data)# 检测重复数据
duplicates = df.duplicated()
print(duplicates)
1.2.2 删除重复数据
使用drop_duplicates()
函数可以删除数据集中的重复记录。该函数默认保留第一次出现的记录,删除后续的重复记录。
import pandas as pd# 创建一个包含重复数据的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Alice'],'Age': [25, 30, 35, 40, 25],'Salary': [50000, 60000, 70000, 80000, 50000]}
df = pd.DataFrame(data)
# 删除重复数据
df_unique = df.drop_duplicates()
print(df_unique)# 保留最后一次出现的记录
df_unique_last = df.drop_duplicates(keep='last')
print(df_unique_last)
1.3 处理异常值
异常值是指数据集中明显偏离其他值的数据点。异常值可能是由于数据收集过程中的错误或极端情况导致的。处理异常值的方法包括删除异常值、替换异常值等。Pandas提供了多种方法来检测和处理异常值。
1.3.1 检测异常值
检测异常值的方法有很多,常见的方法包括使用统计学方法(如标准差、四分位数等)和可视化方法(如箱线图)。Pandas中的describe()
函数可以用来获取数据集的基本统计信息,帮助初步判断是否存在异常值。
import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)# 获取数据集的基本统计信息
stats = df.describe()
print(stats)
##### 1.3.2 删除异常值
如果确定某些数据点是异常值,可以考虑删除这些异常值。Pandas中的布尔索引可以用来筛选出正常的数据点。
import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)
# 删除年龄大于60的异常值
df_cleaned = df[df['Age'] <= 60]
print(df_cleaned)# 删除薪水大于500000的异常值
df_cleaned_salary = df[df['Salary'] <= 500000]
print(df_cleaned_salary)
1.3.3 替换异常值
在某些情况下,删除异常值可能会导致数据集的样本量减少,影响分析结果的准确性。此时,可以考虑使用替换的方法来处理异常值。常见的替换方法包括使用中位数、平均值等。
import pandas as pd
# 创建一个包含异常值的示例数据集
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 100],'Salary': [50000, 60000, 70000, 80000, 1000000]}
df = pd.DataFrame(data)
# 使用中位数替换年龄大于60的异常值
median_age = df['Age'].median()
df['Age'] = df['Age'].apply(lambda x: median_age if x > 60 else x)
print(df)# 使用平均值替换薪水大于500000的异常值
mean_salary = df['Salary'].mean()
df['Salary'] = df['Salary'].apply(lambda x: mean_salary if x > 500000 else x)
print(df)
通过本课程的学习,学员将掌握使用Pandas库处理数据集中缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。