数据分析三件套实战:Pandas核心用法详解
数据分析三件套(NumPy, Pandas, Matplotlib)中,Pandas是数据处理的核心工具。以下为实战中最高频的用法,涵盖数据操作全流程:
一、数据读取与初探
import pandas as pd
# 读取CSV/Excel/SQL数据
df = pd.read_csv('data.csv')
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# 基础探查
print(df.head(3)) # 查看前3行
print(df.info()) # 数据类型概览
print(df.describe()) # 数值统计分布
二、数据清洗(关键步骤)
# 处理缺失值
df['age'].fillna(df['age'].median(), inplace=True) # 中位数填充
df.dropna(subset=['income'], inplace=True) # 删除收入缺失行
# 处理异常值
q1 = df['price'].quantile(0.25)
q3 = df['price'].quantile(0.75)
df = df[(df['price'] > q1 - 1.5*(q3-q1)) & (df['price'] < q3 + 1.5*(q3-q1))]
# 数据类型转换
df['date'] = pd.to_datetime(df['date'])
df['category'] = df['category'].astype('category')
三、数据选择与过滤
# 列选择
df[['name', 'age']] # 选择多列
df.filter(like='_score') # 模糊匹配列名
# 行选择
df[df['age'] > 30] # 条件过滤
df.query('income > 5000 & city == "北京"') # 查询表达式
# 索引操作
df.set_index('id', inplace=True) # 设置索引
df.loc[1001] # 按索引选取
df.iloc[10:20] # 按位置切片
四、数据处理与转换
# 新增计算列
df['bmi'] = df['weight'] / (df['height']**2) # BMI计算
# 应用函数(例:薪资分级)
def salary_level(x):
return 'high' if x > 15000 else 'medium' if x > 8000 else 'low'
df['salary_level'] = df['salary'].apply(salary_level)
# 分组标准化(Z-score)
df['score_std'] = df.groupby('department')['score'].transform(
lambda x: (x - x.mean()) / x.std()
)
五、聚合分析与透视
# 基础聚合
df.groupby('city')['sales'].sum() # 各城市销售总额
df.groupby(['year', 'quarter']).agg({
'revenue': ['sum', 'mean'],
'cost': 'median'
})
# 透视表
pd.pivot_table(df,
index='region',
columns='product',
values='sales',
aggfunc='sum',
fill_value=0)
六、时间序列处理
# 时间特征提取
df['year'] = df['date'].dt.year
df['day_of_week'] = df['date'].dt.day_name()
# 重采样(日数据→月汇总)
monthly_sales = df.set_index('date').resample('M')['sales'].sum()
七、数据输出
# 保存处理结果
df.to_csv('cleaned_data.csv', index=False)
df.to_excel('report.xlsx', sheet_name='Summary')
实战技巧总结
- 链式操作:使用
df.assign().query().groupby()连续处理避免中间变量 - 内存优化:对分类数据使用
category类型可减少70%内存占用 - 批量处理:百万级数据优先使用
vectorization(向量化)替代apply - 性能监控:结合
%timeit命令测试关键操作耗时
示例:统计各城市不同年龄段平均收入
(df.groupby(['city', pd.cut(df['age'], bins=[0,30,50,100])]) ['income'].mean() .unstack() .style.format('{:.1f}'))
掌握这些核心操作可解决90%的日常数据处理需求,建议配合Jupyter Notebook实时验证操作结果。
8777

被折叠的 条评论
为什么被折叠?



