高效數(shù)據(jù)分析必備:Pandas 最常用的十個核心函數(shù)
Pandas是Python數(shù)據(jù)分析的利器,其內(nèi)置函數(shù)能大幅簡化數(shù)據(jù)操作流程。本文介紹10個高頻函數(shù),結(jié)合代碼示例,幫助您快速掌握核心功能。
1. apply()
功能:對DataFrame的行或列應(yīng)用自定義函數(shù)。場景:數(shù)據(jù)轉(zhuǎn)換或復(fù)雜計(jì)算。
# 示例:計(jì)算BMI指數(shù)(體重kg / (身高m)^2)
df['BMI'] = df.apply(lambda row: row['weight'] / (row['height']/100)**2, axis=1)
2. groupby()
功能:按指定列分組,實(shí)現(xiàn)聚合分析。場景:統(tǒng)計(jì)分組數(shù)據(jù)(如分地區(qū)銷售總額)。
# 按城市分組計(jì)算平均薪資
grouped = df.groupby('city')['salary'].mean()
# 多列聚合(同時(shí)計(jì)算均值和最大值)
result = df.groupby('department').agg({'salary': ['mean', 'max']})
3. fillna()
功能:填充缺失值(NaN)。場景:數(shù)據(jù)清洗時(shí)處理缺失值。
# 用均值填充年齡缺失值
df['age'] = df['age'].fillna(df['age'].mean())
# 用前向填充法填充(用前一行數(shù)據(jù)填充)
df['sales'] = df['sales'].fillna(method='ffill')
4. merge()
功能:合并多個DataFrame(類似SQL的JOIN)。場景:整合多源數(shù)據(jù)。
# 按ID合并兩個表(默認(rèn)內(nèi)連接)
merged_df = pd.merge(df1, df2, on='id')
# 左連接(保留左表所有數(shù)據(jù))
merged_left = pd.merge(df1, df2, on='id', how='left')
5. pivot_table()
功能:創(chuàng)建數(shù)據(jù)透視表,多維數(shù)據(jù)匯總。場景:交叉分析(如分地區(qū)、分產(chǎn)品統(tǒng)計(jì))。
# 統(tǒng)計(jì)不同城市和性別的平均薪資
pivot = pd.pivot_table(
df,
values='salary',
index='city',
columns='gender',
aggfunc='mean'
)
6. value_counts()
功能:統(tǒng)計(jì)列中唯一值的頻次。場景:快速查看數(shù)據(jù)分布。
# 統(tǒng)計(jì)城市分布
city_counts = df['city'].value_counts()
# 顯示占比(歸一化)
city_ratio = df['city'].value_counts(normalize=True)
7. dropna()
功能:刪除包含缺失值的行或列。場景:清理無效數(shù)據(jù)。
# 刪除所有包含缺失值的行
df_clean = df.dropna()
# 刪除某列缺失值
df_clean_age = df.dropna(subset=['age'])
8. astype()
功能:強(qiáng)制轉(zhuǎn)換列的數(shù)據(jù)類型。場景:修復(fù)數(shù)據(jù)類型錯誤(如字符串轉(zhuǎn)數(shù)值)。
# 將字符串列轉(zhuǎn)為整數(shù)
df['user_id'] = df['user_id'].astype(int)
# 將日期字符串轉(zhuǎn)為datetime類型
df['date'] = pd.to_datetime(df['date'])
9. sort_values()
功能:按指定列的值排序。場景:排序分析(如按銷售額降序)。
# 按薪資降序排列
df_sorted = df.sort_values('salary', ascending=False)
# 多列排序(先按城市升序,再按薪資降序)
df_sorted = df.sort_values(['city', 'salary'], ascending=[True, False])
10. query()
功能:通過表達(dá)式篩選數(shù)據(jù)。場景:簡化復(fù)雜條件查詢。
# 篩選年齡大于30且薪資高于5萬的記錄
filtered = df.query('age > 30 and salary > 50000')
總結(jié)
函數(shù) | 典型應(yīng)用場景 |
apply() | 自定義行/列計(jì)算 |
groupby() | 分組聚合統(tǒng)計(jì) |
fillna() | 缺失值填充 |
merge() | 多表關(guān)聯(lián)整合 |
pivot_table() | 多維數(shù)據(jù)透視 |
value_counts() | 唯一值頻次統(tǒng)計(jì) |
dropna() | 刪除缺失數(shù)據(jù) |
astype() | 數(shù)據(jù)類型轉(zhuǎn)換 |
sort_values() | 數(shù)據(jù)排序 |
query() | 表達(dá)式篩選數(shù)據(jù) |
進(jìn)階技巧
- 鏈?zhǔn)讲僮鳎航Y(jié)合多個函數(shù)連續(xù)處理數(shù)據(jù)(如 df.fillna(0).groupby('city').mean())。
- lambda函數(shù):與apply()配合實(shí)現(xiàn)靈活計(jì)算。
- pd.to_datetime():專門處理時(shí)間序列的轉(zhuǎn)換函數(shù)。
通過掌握這10個函數(shù),您能高效完成80%的日常數(shù)據(jù)處理任務(wù)。建議結(jié)合日常實(shí)際數(shù)據(jù)集練習(xí),深化理解。