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