如何在 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
这是一个示例系列
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