我是 cuDF 的新手,可能不了解构造的目的,所以这是一个非常普遍的问题。我有一个主要包含字符串列的数据集,我希望使用 apply_rows 来执行字符串的处理,但是,我意识到这可能只适用于数字数据。
这是我在大多数网站中引用的示例:
import cudf
import numpy as np
df = cudf.DataFrame()
nelem = 3
df['col1'] = np.arange(nelem)
df['col2'] = np.arange(nelem)
df['col3'] = np.arange(nelem)
# Define input columns for the kernel
col1 = df['col1']
col2 = df['col2']
col3 = df['col3']
def kernel(col1, col2, col3, out1, out2, kwarg1, kwarg2):
for i, (x, y, z) in enumerate(zip(col1, col2, col3)):
out1[i] = kwarg2 * x - kwarg1 * y
out2[i] = y - kwarg1 * z
df.apply_rows(kernel,
incols=['col1', 'col2', 'col3'],
outcols=dict(out1=np.float64),
kwargs=dict(kwarg1=3, kwarg2=4))
如果我将其更改为
import cudf
import numpy as np
df = cudf.DataFrame()
nelem = 3
df['col1'] = np.arange(nelem)
df['col2'] = np.arange(nelem)
df['col3'] = ['a','a','a'] # <<- change to string
# Define input columns for the kernel
col1 = df['col1']
col2 = df['col2']
col3 = df['col3']
def kernel(col1, col2, col3, out1, out2, kwarg1, kwarg2):
for i, (x, y, z) in enumerate(zip(col1, col2, col3)):
out1[i] = kwarg2 * x - kwarg1 * y
out2[i] = y - kwarg1 * z
它报告类似 AttributeError: 'nvstrings' object has no attribute 'to_gpu_array' 的错误。
这是否设计为仅适用于数值?我假设这是为了处理矩阵类型的操作而设计的,这就是这个约束的原因。有人可以在这里提供一些见解吗?