pandas高阶用法(一)
·
pandas高阶用法(一)
近期需要大量处理数据,pandas比excel效率高太多,记录一下pandas的常用高阶用法
一、高级数据选择与过滤
-
.query()动态查询
通过字符串表达式筛选数据,支持变量引用:# 筛选年龄大于25且分数>90的记录 filtered_df = df.query('Age > 25 and Score > 90') # 结合变量(假设平均分是85) avg_score = 85 df.query('Score > @avg_score + 5') # 引用外部变量 -
多重条件索引
使用布尔逻辑组合筛选复杂数据:# 筛选列A>10且列B包含"成功"的记录 filtered_data = df[(df['A'] > 10) & (df['B'].str.contains('成功'))]
二、智能分组与聚合
-
多维度分组统计
# 按城市和月份分组,计算销售额总和与平均值 grouped = df.groupby(['city', 'month']).agg({'sales': ['sum', 'mean']}) -
自定义聚合函数
# 定义极差计算函数 def value_range(series): return series.max() - series.min() # 应用自定义函数 result = df.groupby('group_col')['value_col'].apply(value_range)
三、时间序列深度处理
-
滚动窗口计算
# 计算7天移动平均 df['7d_avg'] = df['price'].rolling(window=7).mean() -
时间重采样
# 将日数据按月聚合(取月末最后一天) monthly_data = df.resample('M').last()
四、数据透视与形态转换
-
多级数据透视表
# 创建包含双重聚合的透视表 pivot_table = pd.pivot_table(df, values='sales', index=['region', 'manager'], columns='product', aggfunc={'sales': [np.sum, np.mean]}) -
宽表转长表(melt)
# 将多列指标转换为键值对形式 melted_df = pd.melt(df, id_vars=['id'], value_vars=['2023_Q1', '2023_Q2'], var_name='quarter', value_name='revenue')
五、高性能处理技巧
-
矢量化运算
# 避免循环,使用向量化计算 df['total'] = df['price'] * df['quantity'] # 直接列运算 df['log_value'] = np.log1p(df['value']) # 数学函数批处理 -
内存优化
# 将文本列转为category类型 df['category_col'] = df['text_col'].astype('category') # 查看内存节省情况 print(df.memory_usage(deep=True))
六、复杂数据合并
-
多表关联
# 订单表与客户表内连接 merged_df = pd.merge(orders, customers, on='customer_id', how='inner', suffixes=('_order', '_cust')) -
轴向拼接
# 垂直堆叠季度数据 full_year = pd.concat([q1_df, q2_df, q3_df], axis=0) # 水平合并指标 combined = pd.concat([sales_df, cost_df], axis=1)
七、高级数据清洗
-
智能填充缺失值
# 按时间序列线性插值 df['temperature'].interpolate(method='time', inplace=True) # 使用分组中位数填充 df['income'] = df.groupby('education')['income'].transform(lambda x: x.fillna(x.median()))
八、机器学习集成
-
特征工程处理
# 日期特征提取 df['order_weekday'] = df['order_date'].dt.dayofweek # 文本向量化 from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer() text_features = pd.DataFrame(tfidf.fit_transform(df['comments']).toarray())
最佳实践建议:
• 处理超大数据集时使用chunksize分块读取
• 优先使用eval()进行复杂表达式计算
• 利用pd.api.types模块进行数据类型验证
• 对分类数据使用pd.Categorical优化存储
更多推荐

所有评论(0)