Vaex如何将空格分隔的单列文本拆分为多个列
Vaex 字符串列拆分问题解决方案
1. No memory tracker found with name default 报错修复
这个报错是Vaex旧版本的已知兼容问题,两种修复方式二选一即可:
- 直接升级Vaex到最新稳定版本,执行命令:
pip install --upgrade vaex - 如果暂时无法升级,在代码最开头、导入vaex后添加配置显式指定内存追踪器:
import vaex vaex.settings.main.memory_tracker.default = "process"
2. 单列按空格拆分为多列实现方案
你之前用的Pandas实现是rsplit后转多列,Vaex原生提供了向量化的字符串拆分接口,不要直接对split结果调用普通apply:Vaex的apply是逐行执行Python函数,性能远低于原生向量化操作,且旧版本下容易触发类型识别错误。
根据你的场景选对应方法即可:
场景1:已知拆分后固定列数(性能最优,推荐)
如果所有行按空格拆分后的元素个数固定,直接给str.split传expand=True参数即可直接生成多列,等效于Pandas的split/rsplit expand效果:
import vaex import pandas as pd # 测试数据构造 df = pd.DataFrame({'ticker' : ['spx 5/25/2001 p500', 'spx 5/25/2001 p600', 'spx 5/25/2001 p700']}) df_vaex = vaex.from_pandas(df) # 从左往右按空格拆分,拆为3列直接赋值 df_vaex[['asset', 'trade_date', 'strike_price']] = df_vaex.ticker.str.split(pat=' ', n=2, expand=True)
如果需要实现Pandas里rsplit(从右往左拆分)的效果,加reverse=True参数即可:
# 从右往左拆分,等效于pd.Series.str.rsplit df_vaex[['asset', 'trade_date', 'strike_price']] = df_vaex.ticker.str.split(pat=' ', n=2, expand=True, reverse=True)
场景2:拆分后列数不固定
如果每行拆分后的元素个数不统一,可以先获取拆分后的列表列,再通过索引提取对应位置的元素生成新列,不存在的索引位置会自动填充为缺失值:
# 生成拆分后的列表列 split_result = df_vaex.ticker.str.split(pat=' ') # 提取对应位置元素,比如取最后一段 df_vaex['last_segment'] = split_result.str[-1] # 取第一段 df_vaex['first_segment'] = split_result.str[0]
提示:Vaex的字符串数组原生支持列表索引操作,直接用
.str[索引]取值即可,不需要写lambda函数走apply逻辑。
内容的提问来源于stack exchange,提问作者mh0189
相关产品推荐
相关产品推荐

