Как разделить имена, используя регулярные выражения в кадре данных Pandas? - PullRequest
0 голосов
/ 05 января 2019

Мой набор данных выглядит как ниже. Я пытаюсь разделить «2-й» столбец на заголовок, имя и фамилию с помощью регулярного выражения. Я новичок в Python и регулярных выражений.

Пока мой код выглядит ниже

def spilt_it(name):
re.findall()
if x :
return(x.group())

Dataset:

{
    'Name': {0: ' Braund', 1: ' Heikkinen', 2: ' Allen', 3: ' Moran', 4: ' McCarthy'}, 
    'Fullname': {0: ' Mr. Owen Harris ', 1: ' Miss. Laina ', 2: ' Mr. William Henry ', 3: ' Mr. James ', 4: ' Mr. Timothy J '}, 
    'num': {0: 1, 1: 0, 2: 0, 3: 0, 4: 0}
}

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Используя pandas.Series.str.split , вы можете разбить столбец Fullname на пробел " ", n=-1 означает возврат ко всем разделенным словам. Итак, полный рабочий пример с использованием df["Fullname"].str.split(" ", n = -1, expand = True),

import pandas as pd
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
df = pd.DataFrame({'Name': {0: ' Braund', 1: ' Heikkinen', 2: ' Allen', 3: ' Moran', 4: ' McCarthy'}, 'Fullname': {0: ' Mr. Owen Harris ', 1: ' Miss. Laina ', 2: ' Mr. William Henry ', 3: ' Mr. James ', 4: ' Mr. Timothy J '}, 'num': {0: 1, 1: 0, 2: 0, 3: 0, 4: 0}})

new = df["Fullname"].str.split(" ", n = -1, expand = True) 
# making seperate title column from new data frame 
df["Title"]= new[1]   
# making seperate first name column from new data frame 
df["First Name"]= new[2] 
# making seperate last name column from new data frame
df["Last Name"]= new[3]
print(df.head())

Выход:

         Name             Fullname  num  Title First Name Last Name
0      Braund     Mr. Owen Harris     1    Mr.       Owen    Harris
1   Heikkinen         Miss. Laina     0  Miss.      Laina
2       Allen   Mr. William Henry     0    Mr.    William     Henry
3       Moran           Mr. James     0    Mr.      James
4    McCarthy       Mr. Timothy J     0    Mr.    Timothy         J
0 голосов
/ 05 января 2019

Основная точка: использовать функцию str.split(' ', n=1, expand=True)

Я не вижу никакой фамилии в вашем примере, поэтому я делаю один сплит. Вы можете сделать столько, сколько захотите, с параметром n = 1 или n = 2 и т. Д.

Сначала: полоса несколько лишних пробелов из ваших имен, а затем split имя в первом пробеле:

df = pd.DataFrame(data)

split_names = (df['Fullname']
    .str.strip()
    .str.split(' ', n=1, expand=True)
    .rename(columns={0:'Title', 1:'First_name'})
)

Затем: добавьте это разделенное имя к вашему фрейму данных, используя pd.concat () :

df = pd.concat([df, split_names], axis=1)

Результат:

print(df)
         Name             Fullname  num  Title     First_name
0      Braund     Mr. Owen Harris     1    Mr.    Owen Harris
1   Heikkinen         Miss. Laina     0  Miss.          Laina
2       Allen   Mr. William Henry     0    Mr.  William Henry
3       Moran           Mr. James     0    Mr.          James
4    McCarthy       Mr. Timothy J     0    Mr.      Timothy J
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...