Как переставить куски каждой строки в столбце серии Dask? - PullRequest
0 голосов
/ 25 апреля 2020

Вот пример серии

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]
в качестве примера ab- c -de -> be- c -ad

в обычном python это просто, моя функция "переставить" просто нуждается в str.split () с помощью "-" и повторной сборки

Но у меня возникают проблемы с этим с помощью серии dask

Когда я делаю это:

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

чанки становятся сериями, содержащими списки строк и пытающимися проиндексировать индексы чанков серия вместо.

Есть ли лучший способ сделать это?

1 Ответ

1 голос
/ 25 апреля 2020

Начните с определения функции переупорядочения, которая будет применяться к каждому элементу:

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

Затем:

  • Разделение источника Серия с использованием обычных str.split . Результатом также является Series , каждый элемент которого содержит list - результат разбиения (фрагменты исходной строки).
  • Примените к нему вышеуказанную функцию, преобразовав список каждого чанка в строку переставленных чанков.
  • Вызовите 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
...