pandas高阶用法(一)

近期需要大量处理数据,pandas比excel效率高太多,记录一下pandas的常用高阶用法


一、高级数据选择与过滤

  1. .query() 动态查询
    通过字符串表达式筛选数据,支持变量引用:

    # 筛选年龄大于25且分数>90的记录
    filtered_df = df.query('Age > 25 and Score > 90')
    # 结合变量(假设平均分是85)
    avg_score = 85
    df.query('Score > @avg_score + 5')  # 引用外部变量
    
  2. 多重条件索引
    使用布尔逻辑组合筛选复杂数据:

    # 筛选列A>10且列B包含"成功"的记录
    filtered_data = df[(df['A'] > 10) & (df['B'].str.contains('成功'))]
    

二、智能分组与聚合

  1. 多维度分组统计

    # 按城市和月份分组,计算销售额总和与平均值
    grouped = df.groupby(['city', 'month']).agg({'sales': ['sum', 'mean']})
    
  2. 自定义聚合函数

    # 定义极差计算函数
    def value_range(series):
        return series.max() - series.min()
    
    # 应用自定义函数
    result = df.groupby('group_col')['value_col'].apply(value_range)
    

三、时间序列深度处理

  1. 滚动窗口计算

    # 计算7天移动平均
    df['7d_avg'] = df['price'].rolling(window=7).mean()
    
  2. 时间重采样

    # 将日数据按月聚合(取月末最后一天)
    monthly_data = df.resample('M').last()
    

四、数据透视与形态转换

  1. 多级数据透视表

    # 创建包含双重聚合的透视表
    pivot_table = pd.pivot_table(df, 
                                values='sales',
                                index=['region', 'manager'],
                                columns='product',
                                aggfunc={'sales': [np.sum, np.mean]})
    
  2. 宽表转长表(melt)

    # 将多列指标转换为键值对形式
    melted_df = pd.melt(df, 
                       id_vars=['id'], 
                       value_vars=['2023_Q1', '2023_Q2'],
                       var_name='quarter',
                       value_name='revenue')
    

五、高性能处理技巧

  1. 矢量化运算

    # 避免循环,使用向量化计算
    df['total'] = df['price'] * df['quantity']  # 直接列运算
    df['log_value'] = np.log1p(df['value'])     # 数学函数批处理
    
  2. 内存优化

    # 将文本列转为category类型
    df['category_col'] = df['text_col'].astype('category')
    # 查看内存节省情况
    print(df.memory_usage(deep=True))
    

六、复杂数据合并

  1. 多表关联

    # 订单表与客户表内连接
    merged_df = pd.merge(orders, customers, 
                        on='customer_id', 
                        how='inner',
                        suffixes=('_order', '_cust'))
    
  2. 轴向拼接

    # 垂直堆叠季度数据
    full_year = pd.concat([q1_df, q2_df, q3_df], axis=0)
    # 水平合并指标
    combined = pd.concat([sales_df, cost_df], axis=1)
    

七、高级数据清洗

  1. 智能填充缺失值

    # 按时间序列线性插值
    df['temperature'].interpolate(method='time', inplace=True)
    # 使用分组中位数填充
    df['income'] = df.groupby('education')['income'].transform(lambda x: x.fillna(x.median()))
    

八、机器学习集成

  1. 特征工程处理

    # 日期特征提取
    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优化存储

更多推荐