Разделить столбцы Python DF на 2 на основе предварительно определенного списка параметров - PullRequest
1 голос
/ 19 апреля 2020

У меня есть фрейм данных, который выглядит следующим образом:

print(df):

Text
John Smith abc def ghi jkl
Michael Smith abc def ghi jkl
Liz Jones abc def ghi jkl

У меня также есть предопределенный список людей, которых я хочу найти, и разбить вышеуказанное содержимое на две колонки.

names = ('John Smith','Michael Smith','Liz Jones')

Я надеюсь получить следующее:

print(df):

Name             |          Information
John Smith       |        abc def ghi jkl
Michael Smith    |        abc def ghi jkl
Liz Jones        |        abc def ghi jkl

Я пытался:

df['Name','Information'] = df['Text'].str.split(names)

, но я думаю, что str.split нужна строка и не принимает список имен , Есть ли в любом случае разделить столбцы из определенного списка?

Любая помощь будет высоко ценится. Большое спасибо

1 Ответ

4 голосов
/ 19 апреля 2020

Используйте Series.str.extract со всеми именами, объединенными | для регулярного выражения или затем для всех других значений:

names = ('John Smith','Michael Smith','Liz Jones')

df = df['Text'].str.extract(f'(?P<Name>{"|".join(names)})(?P<Information>.*)')
print (df)
           Name       Information
0     John Smith   abc def ghi jkl
1  Michael Smith   abc def ghi jkl
2      Liz Jones   abc def ghi jkl

Если хотите удалить этот столбец и добавить все другие столбцы для оригинального использования DataFrame.pop для столбца извлечения и DataFrame.join:

df = df.join(df.pop('Text').str.extract(f'(?P<Name>{"|".join(names)})(?P<Information>.*)'))

Или:

df[['Name','Information']] = df.pop('Text').str.extract(f'(?P<letter>{"|".join(names)})(.*)')
print (df)

            Name       Information
0     John Smith   abc def ghi jkl
1  Michael Smith   abc def ghi jkl
2      Liz Jones   abc def ghi jkl
...