使用 Python 進行數(shù)據(jù)預(yù)處理的十個常用函數(shù)
在數(shù)據(jù)科學(xué)領(lǐng)域,數(shù)據(jù)預(yù)處理是一個非常重要的步驟,它能夠幫助我們清洗和準備數(shù)據(jù),以便更好地進行數(shù)據(jù)分析或機器學(xué)習(xí)建模。今天,我們就來聊聊使用 Python 進行數(shù)據(jù)預(yù)處理的 10 個常用函數(shù)。這些函數(shù)都是基于 Pandas 庫的,Pandas 是一個強大的數(shù)據(jù)處理庫,廣泛應(yīng)用于數(shù)據(jù)科學(xué)項目中。
1. read_csv:讀取 CSV 文件
首先,我們需要將數(shù)據(jù)加載到 Pandas DataFrame 中。read_csv 函數(shù)是最常用的讀取 CSV 文件的方法。
import pandas as pd
# 讀取 CSV 文件
df = pd.read_csv('data.csv')
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id name age city
0 1 John 28 New York
1 2 Jane 34 Los Angeles
2 3 Mike 42 Chicago
3 4 Alex 21 Houston
4 5 Emma 29 Phoenix
解釋:
- pd.read_csv('data.csv'):讀取名為 data.csv 的文件。
- df.head():顯示 DataFrame 的前 5 行數(shù)據(jù)。
2. info:查看數(shù)據(jù)信息
info 函數(shù)可以顯示 DataFrame 的基本信息,包括列名、非空值數(shù)量和數(shù)據(jù)類型。
# 查看數(shù)據(jù)信息
df.info()
輸出結(jié)果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 5 non-null int64
1 name 5 non-null object
2 age 5 non-null int64
3 city 5 non-null object
dtypes: int64(2), object(2)
memory usage: 280.0+ bytes
解釋:
- df.info():顯示 DataFrame 的基本信息,包括每列的數(shù)據(jù)類型和非空值數(shù)量。
3. describe:生成描述性統(tǒng)計信息
describe 函數(shù)可以生成數(shù)值型列的描述性統(tǒng)計信息,如均值、標準差、最小值、最大值等。
# 生成描述性統(tǒng)計信息
print(df.describe())
輸出結(jié)果:
id age
count 5.000000 5.000000
mean 3.000000 30.800000
std 1.581139 8.372603
min 1.000000 21.000000
25% 2.000000 24.500000
50% 3.000000 29.000000
75% 4.000000 34.000000
max 5.000000 42.000000
解釋:
- df.describe():生成數(shù)值型列的描述性統(tǒng)計信息。
4. isnull 和 notnull:檢查缺失值
isnull 和 notnull 函數(shù)可以用來檢查 DataFrame 中是否存在缺失值。
# 檢查缺失值
print(df.isnull())
# 檢查非缺失值
print(df.notnull())
輸出結(jié)果:
id name age city
0 False False False False
1 False False False False
2 False False False False
3 False False False False
4 False False False False
id name age city
0 True True True True
1 True True True True
2 True True True True
3 True True True True
4 True True True True
解釋:
- df.isnull():返回一個布爾 DataFrame,表示哪些單元格是缺失值。
- df.notnull():返回一個布爾 DataFrame,表示哪些單元格是非缺失值。
5. fillna:填充缺失值
fillna 函數(shù)可以用來填充 DataFrame 中的缺失值。
# 填充缺失值
df['age'] = df['age'].fillna(df['age'].mean())
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id name age city
0 1 John 28.0 New York
1 2 Jane 34.0 Los Angeles
2 3 Mike 42.0 Chicago
3 4 Alex 21.0 Houston
4 5 Emma 29.0 Phoenix
解釋:
- df['age'].fillna(df['age'].mean()):用 age 列的均值填充缺失值。
6. dropna:刪除缺失值
dropna 函數(shù)可以用來刪除包含缺失值的行或列。
# 刪除包含缺失值的行
df = df.dropna()
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id name age city
0 1 John 28.0 New York
1 2 Jane 34.0 Los Angeles
2 3 Mike 42.0 Chicago
3 4 Alex 21.0 Houston
4 5 Emma 29.0 Phoenix
解釋:
- df.dropna():刪除包含缺失值的行。
7. drop:刪除指定的行或列
drop 函數(shù)可以用來刪除指定的行或列。
# 刪除指定的列
df = df.drop(columns=['city'])
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id name age
0 1 John 28.0
1 2 Jane 34.0
2 3 Mike 42.0
3 4 Alex 21.0
4 5 Emma 29.0
解釋:
- df.drop(columns=['city']):刪除 city 列。
8. rename:重命名列
rename 函數(shù)可以用來重命名 DataFrame 中的列。
# 重命名列
df = df.rename(columns={'name': 'full_name'})
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id full_name age
0 1 John 28.0
1 2 Jane 34.0
2 3 Mike 42.0
3 4 Alex 21.0
4 5 Emma 29.0
解釋:
- df.rename(columns={'name': 'full_name'}):將 name 列重命名為 full_name。
9. apply:應(yīng)用自定義函數(shù)
apply 函數(shù)可以用來對 DataFrame 的列應(yīng)用自定義函數(shù)。
# 定義一個自定義函數(shù)
def age_group(age):
if age < 30:
return 'Young'
elif age < 50:
return 'Middle-aged'
else:
return 'Senior'
# 應(yīng)用自定義函數(shù)
df['age_group'] = df['age'].apply(age_group)
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id full_name age age_group
0 1 John 28.0 Young
1 2 Jane 34.0 Middle-aged
2 3 Mike 42.0 Middle-aged
3 4 Alex 21.0 Young
4 5 Emma 29.0 Young
解釋:
- df['age'].apply(age_group):對 age 列應(yīng)用 age_group 函數(shù),生成新的 age_group 列。
10. merge:合并 DataFrame
merge 函數(shù)可以用來合并兩個 DataFrame。
# 創(chuàng)建另一個 DataFrame
df2 = pd.DataFrame({
'id': [1, 2, 3, 4, 5],
'salary': [50000, 60000, 70000, 45000, 55000]
})
# 合并 DataFrame
df = df.merge(df2, on='id')
# 顯示前 5 行數(shù)據(jù)
print(df.head())
輸出結(jié)果:
id full_name age age_group salary
0 1 John 28.0 Young 50000
1 2 Jane 34.0 Middle-aged 60000
2 3 Mike 42.0 Middle-aged 70000
3 4 Alex 21.0 Young 45000
4 5 Emma 29.0 Young 55000
解釋:
- df.merge(df2, on='id'):根據(jù) id 列合并 df 和 df2。
實戰(zhàn)案例:處理電子商務(wù)數(shù)據(jù)
假設(shè)我們有一個電子商務(wù)數(shù)據(jù)集,包含用戶的購買記錄。我們需要進行以下操作:1. 讀取數(shù)據(jù)。2. 檢查并處理缺失值。3. 生成用戶購買次數(shù)和總金額的匯總信息。4. 將結(jié)果保存到新的 CSV 文件中。
import pandas as pd
# 1. 讀取數(shù)據(jù)
df = pd.read_csv('ecommerce_data.csv')
# 2. 檢查并處理缺失值
print(df.isnull().sum())
df = df.dropna()
# 3. 生成用戶購買次數(shù)和總金額的匯總信息
user_summary = df.groupby('user_id').agg({'order_id': 'count', 'amount': 'sum'}).reset_index()
user_summary.columns = ['user_id', 'purchase_count', 'total_amount']
# 4. 將結(jié)果保存到新的 CSV 文件中
user_summary.to_csv('user_summary.csv', index=False)
# 顯示前 5 行數(shù)據(jù)
print(user_summary.head())
輸出結(jié)果:
user_id purchase_count total_amount
0 1 5 1500.0
1 2 3 900.0
2 3 7 2100.0
3 4 2 400.0
4 5 4 1200.0
總結(jié)
本文介紹了使用 Python 進行數(shù)據(jù)預(yù)處理的 10 個常用函數(shù),包括讀取 CSV 文件、查看數(shù)據(jù)信息、生成描述性統(tǒng)計信息、檢查和處理缺失值、刪除指定的行或列、重命名列、應(yīng)用自定義函數(shù)、合并 DataFrame 等。通過這些函數(shù),我們可以高效地處理和準備數(shù)據(jù),為后續(xù)的數(shù)據(jù)分析或機器學(xué)習(xí)任務(wù)打下堅實的基礎(chǔ)。