vaex使用DataFrame列作为参数调用apply方法失效问题求助
问题原因
你出现报错的核心原因是给vaex的apply方法传入了pandas的Series对象作为参数,vaex的apply仅支持接收自身的列表达式或列名作为入参,不识别pandas数据结构。
解决方案
方案1:修正自定义函数的调用写法
仅需将参数替换为vaex DataFrame自身的列,同时指定返回值类型即可:
import pandas as pd import vaex df = pd.DataFrame( { "Name": [ "Braund, Mr. Owen Harris", "Allen, Mr. William Henry", "Bonnell, Miss. Elizabeth", ], "Rep": ["Braund", "Henry", "Miss."], "Sub": ["<surname>", "<name>", "<title>"], } ) dfv = vaex.from_pandas(df) def func(x, y, z): return x.replace(y, z) # arguments传入vaex自身的列,指定返回类型为字符串 dfv['Test'] = dfv.apply(func, arguments=[dfv.Name, dfv.Rep, dfv.Sub], dtype='str')
方案2:使用vaex内置字符串方法(更推荐,性能更高)
vaex内置了向量化的字符串替换方法,无需自定义函数,处理大数据量时效率远高于逐行apply:
dfv['Test'] = dfv.str.replace(dfv.Name, dfv.Rep, dfv.Sub)
运行结果验证
两种方法最终得到的Test列结果如下:
| 序号 | Name | Rep | Sub | Test |
|---|---|---|---|---|
| 0 | Braund, Mr. Owen Harris | Braund | ||
| 1 | Allen, Mr. William Henry | Henry | Allen, Mr. William | |
| 2 | Bonnell, Miss. Elizabeth | Miss. |
相关产品推荐
相关产品推荐

