[ PROMPT_NODE_27560 ]
data_processing
[ SKILL_DOCUMENTATION ]
# 数据处理与操作
本参考涵盖 Vaex 中的过滤、选择、虚拟列、表达式、聚合、分组操作和数据转换。
## 过滤与选择
Vaex 使用布尔表达式高效过滤数据,无需复制:
### 基本过滤
python
# 简单过滤
df_filtered = df[df.age > 25]
# 多重条件
df_filtered = df[(df.age > 25) & (df.salary > 50000)]
df_filtered = df[(df.category == 'A') | (df.category == 'B')]
# 取反
df_filtered = df[~(df.age 30, name='adults')
df.select(df.salary > 100000, name='high_earners')
# 在操作中使用选择集
mean_age_adults = df.mean(df.age, selection='adults')
count_high_earners = df.count(selection='high_earners')
# 合并选择集
df.select((df.age > 30) & (df.salary > 100000), name='adult_high_earners')
# 列出所有选择集
print(df.selection_names())
# 删除选择集
df.select_drop('adults')
### 高级过滤
python
# 字符串匹配
df_filtered = df[df.name.str.contains('John')]
df_filtered = df[df.name.str.startswith('A')]
df_filtered = df[df.email.str.endswith('@gmail.com')]
# 空值/缺失值过滤
df_filtered = df[df.age.isna()] # 保留缺失值
df_filtered = df[df.age.notna()] # 移除缺失值
# 成员资格过滤
df_filtered = df[df.category.isin(['A', 'B', 'C'])]
# 范围过滤
df_filtered = df[df.age.between(25, 65)]
## 虚拟列与表达式
虚拟列是即时计算的,内存开销为零:
### 创建虚拟列
python
# 算术运算
df['total'] = df.price * df.quantity
df['price_squared'] = df.price ** 2
# 数学函数
df['log_price'] = df.price.log()
df['sqrt_value'] = df.value.sqrt()
df['abs_diff'] = (df.x - df.y).abs()
# 条件逻辑
df['is_adult'] = df.age >= 18
df['category'] = (df.score > 80).where('A', 'B') # If-then-else
### 表达式方法
python
# 数学
df.x.abs() # 绝对值
df.x.sqrt() # 平方根
df.x.log() # 自然对数
df.x.log10() # 以10为底的对数
df.x.exp() # 指数
# 三角函数
df.angle.sin()
df.angle.cos()
df.angle.tan()
df.angle.arcsin()
# 取整
df.x.round(2) # 保留2位小数
df.x.floor() # 向下取整
df.x.ceil() # 向上取整
# 类型转换