Python?Pandas輕松實(shí)現(xiàn)數(shù)據(jù)清理
在當(dāng)今的數(shù)據(jù)驅(qū)動(dòng)時(shí)代,數(shù)據(jù)清理是數(shù)據(jù)分析、機(jī)器學(xué)習(xí)項(xiàng)目中至關(guān)重要的一步。臟數(shù)據(jù)、缺失值、重復(fù)記錄等問(wèn)題都可能?chē)?yán)重影響結(jié)果的準(zhǔn)確性。Python中的Pandas庫(kù)憑借其強(qiáng)大的數(shù)據(jù)處理能力,成為了數(shù)據(jù)清理的首選工具。本文將通過(guò)通俗易懂的語(yǔ)言、簡(jiǎn)潔的邏輯和豐富的案例,帶你輕松上手使用Python和Pandas進(jìn)行數(shù)據(jù)清理。
一、Pandas基礎(chǔ)與數(shù)據(jù)導(dǎo)入
Pandas是Python的一個(gè)開(kāi)源數(shù)據(jù)分析和操作庫(kù),提供了高性能、易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。它基于NumPy構(gòu)建,適用于處理表格數(shù)據(jù),如CSV、Excel文件等。
1. 安裝Pandas
首先,確保你已經(jīng)安裝了Pandas庫(kù)。如果尚未安裝,可以使用以下命令進(jìn)行安裝:
pip install pandas
2. 導(dǎo)入Pandas
import pandas as pd
3. 數(shù)據(jù)導(dǎo)入
Pandas提供了多種方法導(dǎo)入數(shù)據(jù),如從CSV、Excel、SQL數(shù)據(jù)庫(kù)等。以下是從CSV文件導(dǎo)入數(shù)據(jù)的示例:
df = pd.read_csv('data.csv')
二、數(shù)據(jù)預(yù)覽與初步分析
在進(jìn)行數(shù)據(jù)清理之前,了解數(shù)據(jù)的結(jié)構(gòu)和內(nèi)容至關(guān)重要。Pandas提供了多種方法幫助我們快速預(yù)覽數(shù)據(jù)。
1. 查看數(shù)據(jù)前幾行
print(df.head())
2. 查看數(shù)據(jù)列名
print(df.columns)
3. 查看數(shù)據(jù)形狀
print(df.shape)
4. 查看數(shù)據(jù)基本統(tǒng)計(jì)信息
print(df.describe())
通過(guò)這些方法,我們可以初步了解數(shù)據(jù)的結(jié)構(gòu)、類(lèi)型、缺失值情況等,為后續(xù)的數(shù)據(jù)清理工作奠定基礎(chǔ)。
三、處理缺失值
缺失值是數(shù)據(jù)清理中的常見(jiàn)問(wèn)題。Pandas提供了多種方法來(lái)處理缺失值,如刪除含有缺失值的行或列、填充缺失值等。
1. 刪除缺失值
使用dropna方法可以刪除含有缺失值的行或列。
# 刪除含有缺失值的行 df_drop_rows = df.dropna() # 刪除含有缺失值的列 df_drop_cols = df.dropna(axis=1)
2. 填充缺失值
使用fillna方法可以用指定的值填充缺失值。
# 用0填充缺失值 df_fill_0 = df.fillna(0) # 用列的平均值填充缺失值 df_fill_mean = df.fillna(df.mean())
3. 插值填充
對(duì)于時(shí)間序列數(shù)據(jù),可以使用interpolate方法進(jìn)行插值填充。
# 插值填充缺失值 df_interpolate = df.interpolate()
四、處理重復(fù)值
重復(fù)值也是數(shù)據(jù)清理中需要關(guān)注的問(wèn)題。Pandas提供了duplicated方法和drop_duplicates方法來(lái)識(shí)別和處理重復(fù)值。
1. 識(shí)別重復(fù)值
# 標(biāo)記重復(fù)值 duplicated_df = df[df.duplicated()]
2. 刪除重復(fù)值
# 刪除重復(fù)值,保留第一次出現(xiàn)的記錄 df_drop_duplicates = df.drop_duplicates()
3. 刪除所有重復(fù)值
# 刪除所有重復(fù)值,只保留唯一記錄 df_unique = df.drop_duplicates(keep=False)
五、處理異常值
異常值(離群值)可能對(duì)數(shù)據(jù)分析結(jié)果產(chǎn)生顯著影響。Pandas雖然沒(méi)有直接處理異常值的函數(shù),但我們可以結(jié)合統(tǒng)計(jì)方法和條件篩選來(lái)識(shí)別和處理異常值。
1. 使用統(tǒng)計(jì)方法識(shí)別異常值
通常,我們可以使用3σ原則(三倍標(biāo)準(zhǔn)差)或四分位數(shù)間距(IQR)來(lái)識(shí)別異常值。
# 計(jì)算四分位數(shù)間距(IQR) Q1 = df['column_name'].quantile(0.25) Q3 = df['column_name'].quantile(0.75) IQR = Q3 - Q1 # 識(shí)別異常值 outliers = df[(df['column_name'] < (Q1 - 1.5 * IQR)) | (df['column_name'] > (Q3 + 1.5 * IQR))]
2. 處理異常值
處理異常值的方法有很多,如刪除異常值、用平均值、中位數(shù)等替換異常值等。
# 刪除異常值 df_no_outliers = df[~((df['column_name'] < (Q1 - 1.5 * IQR)) | (df['column_name'] > (Q3 + 1.5 * IQR)))] # 用中位數(shù)替換異常值 median_value = df['column_name'].median() df['column_name'] = df['column_name'].apply(lambda x: median_value if ((x < (Q1 - 1.5 * IQR)) | (x > (Q3 + 1.5 * IQR))) else x)
六、數(shù)據(jù)類(lèi)型轉(zhuǎn)換
在數(shù)據(jù)清理過(guò)程中,我們經(jīng)常需要將數(shù)據(jù)類(lèi)型轉(zhuǎn)換為適合分析的類(lèi)型。Pandas提供了astype方法來(lái)進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換。
1. 轉(zhuǎn)換為字符串類(lèi)型
df['column_name'] = df['column_name'].astype(str)
2. 轉(zhuǎn)換為整數(shù)類(lèi)型
df['column_name'] = df['column_name'].astype(int)
3. 轉(zhuǎn)換為浮點(diǎn)數(shù)類(lèi)型
df['column_name'] = df['column_name'].astype(float)
4. 轉(zhuǎn)換為日期時(shí)間類(lèi)型
df['date_column'] = pd.to_datetime(df['date_column'])
七、數(shù)據(jù)標(biāo)準(zhǔn)化與歸一化
在某些數(shù)據(jù)分析場(chǎng)景中,我們需要對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化或歸一化處理,以消除不同量綱對(duì)數(shù)據(jù)分析結(jié)果的影響。
1. 標(biāo)準(zhǔn)化
標(biāo)準(zhǔn)化是將數(shù)據(jù)轉(zhuǎn)換為均值為0、標(biāo)準(zhǔn)差為1的分布??梢允褂胹klearn.preprocessing.StandardScaler進(jìn)行標(biāo)準(zhǔn)化處理。
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df[['column1', 'column2']] = scaler.fit_transform(df[['column1', 'column2']])
2. 歸一化
歸一化是將數(shù)據(jù)縮放到指定的最小值和最大值之間(通常是0和1)??梢允褂胹klearn.preprocessing.MinMaxScaler進(jìn)行歸一化處理。
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() df[['column1', 'column2']] = scaler.fit_transform(df[['column1', 'column2']])
八、案例實(shí)戰(zhàn):清理銷(xiāo)售數(shù)據(jù)
下面,我們將通過(guò)一個(gè)實(shí)際的銷(xiāo)售數(shù)據(jù)清理案例,將上述知識(shí)綜合運(yùn)用。
1. 數(shù)據(jù)導(dǎo)入與預(yù)覽
df = pd.read_csv('sales_data.csv') print(df.head())
2. 處理缺失值
# 刪除含有缺失值的行 df = df.dropna() # 對(duì)某些列用指定值填充缺失值(如用0填充缺失的折扣率) df['discount_rate'] = df['discount_rate'].fillna(0)
3. 處理重復(fù)值
df = df.drop_duplicates()
4. 處理異常值
# 計(jì)算銷(xiāo)售額的四分位數(shù)間距 Q1 = df['sales_amount'].quantile(0.25) Q3 = df['sales_amount'].quantile(0.75) IQR = Q3 - Q1 # 刪除銷(xiāo)售額異常值 df = df[~((df['sales_amount'] < (Q1 - 1.5 * IQR)) | (df['sales_amount'] > (Q3 + 1.5 * IQR)))]
5. 數(shù)據(jù)類(lèi)型轉(zhuǎn)換
# 將日期列轉(zhuǎn)換為日期時(shí)間類(lèi)型 df['order_date'] = pd.to_datetime(df['order_date']) # 將折扣率轉(zhuǎn)換為浮點(diǎn)數(shù)類(lèi)型 df['discount_rate'] = df['discount_rate'].astype(float)
6. 數(shù)據(jù)標(biāo)準(zhǔn)化
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() df[['sales_amount', 'quantity']] = scaler.fit_transform(df[['sales_amount', 'quantity']])
7. 清理后的數(shù)據(jù)預(yù)覽
print(df.head())
通過(guò)以上步驟,我們成功清理了銷(xiāo)售數(shù)據(jù)中的缺失值、重復(fù)值、異常值,并對(duì)數(shù)據(jù)進(jìn)行了類(lèi)型轉(zhuǎn)換和標(biāo)準(zhǔn)化處理。清理后的數(shù)據(jù)更加整潔、規(guī)范,為后續(xù)的數(shù)據(jù)分析工作奠定了堅(jiān)實(shí)基礎(chǔ)。
結(jié)語(yǔ)
數(shù)據(jù)清理是數(shù)據(jù)分析、機(jī)器學(xué)習(xí)項(xiàng)目中不可或缺的一步。Pandas憑借其強(qiáng)大的數(shù)據(jù)處理能力,成為了數(shù)據(jù)清理的首選工具。本文通過(guò)通俗易懂的語(yǔ)言、簡(jiǎn)潔的邏輯和豐富的案例,帶你輕松上手使用Python和Pandas
到此這篇關(guān)于Python Pandas輕松實(shí)現(xiàn)數(shù)據(jù)清理的文章就介紹到這了,更多相關(guān)Python Pandas數(shù)據(jù)清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+OpenCV實(shí)現(xiàn)基于顏色的目標(biāo)識(shí)別
這篇文章主要介紹了利用OpenCV實(shí)現(xiàn)基于顏色的目標(biāo)識(shí)別,即讓攝像頭識(shí)別到視野范圍內(nèi)的有顏色的氣球并返回每個(gè)氣球的中心點(diǎn)坐標(biāo),感興趣的可以跟隨小編學(xué)習(xí)一下2022-01-01Python面向?qū)ο蟪绦蛟O(shè)計(jì)示例小結(jié)
這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計(jì),結(jié)合實(shí)例形式總結(jié)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中比較常見(jiàn)的類(lèi)定義、實(shí)例化、繼承、私有變量等相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-01-01使用Python實(shí)現(xiàn)批量ping操作方法
這篇文章主要介紹了使用Python實(shí)現(xiàn)批量ping操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Pandas 處理DataFrame中的inf值實(shí)現(xiàn)
Inf 表示正無(wú)窮大或負(fù)無(wú)窮大,通常是在數(shù)學(xué)計(jì)算中產(chǎn)生的結(jié)果,本文主要介紹了Pandas 處理DataFrame中的inf值實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04Python運(yùn)維自動(dòng)化psutil模塊的監(jiān)控和管理深入探究
這篇文章主要為大家介紹了Python運(yùn)維自動(dòng)化psutil模塊的監(jiān)控和管理深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01