如何通过Vaex计算DataFrame各列最大值?解决调用报错问题
Vaex 获取DataFrame各列最小/最大值的正确方法
问题场景
我原本用Pandas计算DataFrame各列的最小/最大值,示例数据如下:
col_a col_b col_c 2 8 7 10 4 3 6 5 1
调用df.max()会得到每列的最大值:
col_a 10 col_b 8 col_c 7
现在要把这段Pandas代码转成Vaex实现:
bin_stats = {'min': df.min(), 'max': df.max(), 'binwidth': (df.max()-df.min()+10**-6)/bincount} # 转换数据到分箱位置以实现快速分箱 data = ((df - in_stats['min'])/bin_stats['binwidth']).apply(np.floor)
但调用df.max(column_names)时出现错误:
ValueError: Could not find a class (AggMax_object), seems object is not supported
请问如何获取各列最大值的数组?
解决方法
Vaex的API逻辑和Pandas有差异,要获取每列的最小/最大值,可按以下方式操作:
1. 获取单列/多列的统计值
- 单列最大值直接传入列名字符串:
col_a_max = df.max('col_a') - 多列最大值转为数组,可通过列表推导式遍历列名:
import numpy as np max_values = np.array([df.max(col) for col in df.columns])
2. 批量构建bin_stats字典
对应原Pandas逻辑,Vaex可以这样批量计算并整理:
col_mins = {col: df.min(col) for col in df.columns} col_maxs = {col: df.max(col) for col in df.columns} bincount = 10 # 替换为你的分箱数 bin_stats = { 'min': col_mins, 'max': col_maxs, 'binwidth': {col: (col_maxs[col] - col_mins[col] + 1e-6)/bincount for col in df.columns} }
3. 向量化完成数据分箱
Vaex支持向量化操作,无需逐列循环,直接对整个DataFrame计算:
import numpy as np min_array = np.array([df.min(col) for col in df.columns]) max_array = np.array([df.max(col) for col in df.columns]) binwidth_array = (max_array - min_array + 1e-6) / bincount # 执行分箱转换 data = ((df - min_array) / binwidth_array).apply(np.floor)
关键注意点:Vaex中无参数的df.min()/df.max()会返回整个DataFrame的全局极值,而非每列的极值,这和Pandas的默认行为不同,因此必须指定列名来获取单列的统计值。
内容的提问来源于stack exchange,提问作者afriedman111
相关产品推荐
相关产品推荐

