如何使用Ibis获取表中各浮点数值列的均值与标准差?
使用Ibis计算数值列的聚合统计量
一、获取浮点类型列的均值与标准差
假设你已经通过Ibis连接到目标数据源并拿到了数据表对象(示例中命名为table),可以按以下步骤操作:
- 从表的schema中筛选出所有浮点类型的列:
# 筛选浮点类型列 float_cols = [col for col, dtype in table.schema().items() if dtype.is_float()]
- 为每个浮点列生成均值和标准差的聚合表达式,执行查询得到结果:
# 构建聚合表达式:每个列对应mean和std两个统计量 agg_exprs = [] for col in float_cols: agg_exprs.append(table[col].mean().name(f"{col}_mean")) agg_exprs.append(table[col].std().name(f"{col}_std")) # 执行聚合查询 float_stats = table.select(agg_exprs).execute()
执行后float_stats会返回一个DataFrame,包含所有浮点列的均值和标准差结果。
二、计算所有数值列的聚合结果
如果需要覆盖所有数值类型列(整数、浮点数等),只需调整列的筛选逻辑:
- 筛选所有数值类型列:
# 筛选所有数值类型列(整数、浮点数等) numeric_cols = [col for col, dtype in table.schema().items() if dtype.is_numeric()]
- 构建聚合表达式(可按需扩展统计量,示例包含均值、标准差、总和、中位数):
# 构建聚合表达式 agg_exprs = [] for col in numeric_cols: agg_exprs.extend([ table[col].mean().name(f"{col}_mean"), table[col].std().name(f"{col}_std"), table[col].sum().name(f"{col}_sum"), table[col].median().name(f"{col}_median") ]) # 执行查询 numeric_stats = table.select(agg_exprs).execute()
如果只需要均值和标准差,删除extend里多余的统计量即可。
补充说明
- Ibis的
is_float()和is_numeric()方法是跨后端通用的,不用针对不同数据库调整类型判断逻辑。 - 聚合逻辑会被Ibis下推到数据源执行,比拉取全量数据到本地计算效率更高。
内容的提问来源于stack exchange,提问作者ianmcook
相关产品推荐
相关产品推荐

