如何在 Dask 系列的列中重新排列每个字符串的块?

How do I rearrange chunks of each string in a column of a Dask Series?

这是一个示例系列

msg
a-b-c-d-e
1-2-3-4-5
v-w-x123-y0-z
0-9-8-7-6

我需要重新排列此
中的 msg 列 [0]-[1]-[2]-[3]-[4]
对此
[2]-[5]-[3]-[1]-[4]
例如 a-b-c-d-e --> b-e-c-a-d

在正常情况下 python 这很简单我的函数 "rearrange" 只需要 str.split() 按“-”并重新组装

但是我在使用 dask 系列时遇到了问题

当我这样做时:

chunks = messages.str.split("-")

chunks 成为包含字符串列表的 Series 并尝试索引块而不是索引系列。

有更好的方法吗?

从定义一个重排函数开始,应用于每个 元素:

def myRearrange(tbl):
    return '-'.join([ tbl[i]  for i in [ 1, 4, 2, 0, 3 ] ])

然后:

  • 使用普通 str.split 拆分源 系列 。结果是 还有一个 Series,每个元素包含一个 list - 拆分 结果(原始字符串的块)。
  • 将上面的函数应用到它上面,将每个chunk列表转换成 一串重新排列的块。
  • 调用 compute() 显示结果。

执行此操作的代码是:

messages.str.split('-').apply(myRearrange, meta=('txt', 'object')).compute()

您可能错过的细节是 meta 参数,指定名称 和结果的类型。你也可以通过 meta='object', 得到一个 Series 没有名字

结果是:

0         b-e-c-a-d
1         2-5-3-1-4
2     w-z-x123-v-y0
3         9-6-8-0-7