Python數(shù)據(jù)清洗與預(yù)處理: Pandas與NumPy應(yīng)用技巧

Python數(shù)據(jù)清洗與預(yù)處理: Pandas與NumPy應(yīng)用技巧

一、數(shù)據(jù)清洗基礎(chǔ)與核心挑戰(zhàn)

1.1 數(shù)據(jù)質(zhì)量問題的典型表現(xiàn)

在數(shù)據(jù)分析項目中,約60%的時間消耗在數(shù)據(jù)清洗階段(IBM研究數(shù)據(jù))。常見問題包括:

  1. 缺失值(Missing Values):數(shù)據(jù)集中的空白或NA記錄
  2. 異常值(Outliers):超出正常范圍的極端數(shù)值
  3. 格式錯誤(Format Errors):日期、貨幣等格式不一致
  4. 重復(fù)記錄(Duplicate Entries):完全相同的重復(fù)數(shù)據(jù)行

# 檢測缺失值示例

import pandas as pd

df = pd.read_csv('sales_data.csv')

print(df.isnull().sum()) # 輸出各列缺失值數(shù)量

1.2 Pandas與NumPy的協(xié)同工作流

Pandas提供DataFrame結(jié)構(gòu)處理表格數(shù)據(jù),NumPy則擅長數(shù)值計算。典型工作流:

原始數(shù)據(jù) → Pandas加載 → 缺失值處理 → 異常值修正 → 數(shù)據(jù)轉(zhuǎn)換 → NumPy矩陣運算 → 輸出清洗結(jié)果

二、Pandas高效清洗實戰(zhàn)

2.1 缺失值處理策略

根據(jù)Kaggle調(diào)查,83%的數(shù)據(jù)分析師采用以下方法處理缺失值:

# 多重填補示例

from sklearn.impute import IterativeImputer

imputer = IterativeImputer(max_iter=10)

df[['price', 'quantity']] = imputer.fit_transform(df[['price', 'quantity']])

缺失值處理方法對比
方法 適用場景 數(shù)據(jù)保留率
直接刪除 缺失率<5%
均值填補 數(shù)值型特征
插值法 時間序列

2.2 異常值檢測與處理

使用Z-score方法識別異常值:

# Z-score異常檢測

from scipy import stats

z_scores = stats.zscore(df['sales'])

df = df[(z_scores < 3) & (z_scores > -3)]

三、NumPy數(shù)值優(yōu)化技巧

3.1 矩陣運算加速策略

使用NumPy向量化操作比Pandas循環(huán)快10-100倍:

# 向量化計算示例

import numpy as np

data = np.array(df['price'])

discounted = np.where(data > 100, data*0.9, data*0.95)

3.2 內(nèi)存優(yōu)化方法

通過數(shù)據(jù)類型轉(zhuǎn)換減少內(nèi)存占用:

# 內(nèi)存優(yōu)化示例

df['category'] = df['category'].astype('category') # 減少字符串存儲空間

float_array = np.array(df['value'], dtype=np.float32) # 32位浮點數(shù)

四、高級預(yù)處理技術(shù)

4.1 數(shù)據(jù)標(biāo)準(zhǔn)化與歸一化

# Min-Max標(biāo)準(zhǔn)化

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

4.2 分類特征編碼實踐

處理分類變量的兩種主流方法:

# One-Hot編碼

df_encoded = pd.get_dummies(df, columns=['city'], prefix='city')

# 目標(biāo)編碼(Target Encoding)

from category_encoders import TargetEncoder

encoder = TargetEncoder()

df['city_encoded'] = encoder.fit_transform(df['city'], df['sales'])

五、性能優(yōu)化最佳實踐

5.1 大數(shù)據(jù)集處理策略

使用Dask處理超過內(nèi)存的數(shù)據(jù)集:

# Dask并行處理示例

import dask.dataframe as dd

ddf = dd.read_csv('large_dataset/*.csv')

result = ddf.groupby('category').mean().compute()

5.2 并行計算加速

# 多核并行處理

from joblib import Parallel, delayed

def process_chunk(chunk):

return chunk.apply(complex_calculation)

results = Parallel(n_jobs=4)(delayed(process_chunk)(chunk) for chunk in np.array_split(df, 4))

#Python數(shù)據(jù)清洗 #Pandas技巧 #NumPy應(yīng)用 #數(shù)據(jù)預(yù)處理 #機器學(xué)習(xí)預(yù)處理

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容