數據清洗: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庫處理數據集中缺失值、重復數據和異常值的方法,確保數據的質量,為后續的數據分析和機器學習任務打下堅實的基礎。