Разделите один столбец на два несколькими символами-разделителями в Python - PullRequest
2 голосов
/ 07 февраля 2020

Для примера в информационном кадре есть столбец words, я хочу разбить каждую строку на llo или lut на два столбца: words1 и words2.

                 words
0           helloworld
1          hellomadame
2           salutmonde
3          salutmadame
4    englishhelloworld
5   englishhellomadame
6   francaissalutmonde
7  francaissalutmadame

Как я могу получить следующий результат? Спасибо.

          words1  words2
0          hello   world
1          hello  madame
2          salut   monde
3          salut  madame
4   englishhello   world
5   englishhello  madame
6  francaissalut   monde
7  francaissalut  madame

Я пытаюсь с df.words.str.split('llo | lut', expand=True), но это не получается. Кто-то может помочь? Большое спасибо.

                     0
0           helloworld
1          hellomadame
2           salutmonde
3          salutmadame
4    englishhelloworld
5   englishhellomadame
6   francaissalutmonde
7  francaissalutmadame

Ответы [ 3 ]

3 голосов
/ 07 февраля 2020

Используйте Series.str.replace с добавленным пробелом после строк llo или lut, а затем используйте Series.str.split:

df = df['words'].str.replace('(llo|lut)', r'\1 ', n=1).str.split(expand=True)
df.columns=['words1','words2']
print (df)
          words1           words2
0          hello            world
1          hello           madame
2          salut            monde
3          salut           madame
4   englishhello            world
5   englishhello           madame
6  francaissalut            monde
7  francaissalut           madame
1 голос
/ 07 февраля 2020

Просто используйте одно регулярное выражение, чтобы разделить столбец:

(?<=l(?:lo|ut))
(?<=llo|lut)

См. Демо регулярное выражение . Шаблон представляет собой положительный вид сзади, который соответствует местоположению, которому непосредственно предшествует llo или lut.

Python demo:

import pandas as pd

df = pd.DataFrame({"words": ["helloworld","hellomadame","salutmonde","salutmadame","englishhelloworld","englishhellomadame","francaissalutmonde","francaissalutmadame"]})

df = df['words'].str.split(r'(?<=l(?:lo|ut))', expand=True)
df.columns=['words1','words2']

Выход:

>>> df
          words1  words2
0          hello   world
1          hello  madame
2          salut   monde
3          salut  madame
4   englishhello   world
5   englishhello  madame
6  francaissalut   monde
7  francaissalut  madame
1 голос
/ 07 февраля 2020

Не очень Pythoni c и эффективное решение, но это сделает работу

df = df.words.str.split('(llo|lut)', expand=True)
df[0] = df[0] + df[1]
df = df.drop(1, axis = 1)
df = df.rename(columns = {0 : "words1", 2 : "words2"})

Это выведет

    words1             words2
0   hello              world
1   hello              madame
2   salut              monde
3   salut              madame
4   englishhello       world
5   englishhello       madame
6   francaissalut      monde
7   francaissalut      madame

При переименовании ключи словаря должны были быть 0 и 2, потому что после объединения структура данных выглядит как

    0              1    2
0   hello          llo  world
1   hello          llo  madame
2   salut          lut  monde
3   salut          lut  madame
4   englishhello   llo  world
5   englishhello   llo  madame
6   francaissalut  lut  monde
7   francaissalut  lut  madame

, а после удаления столбца 1 она становится

    0               2
0   hello           world
1   hello           madame
2   salut           monde
3   salut           madame
4   englishhello    world
5   englishhello    madame
6   francaissalut   monde
7   francaissalut   madame

Имена столбцов равны 0 и 2, следовательно, переименование 0 и 2 сделано. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...