Pandas Dataframe str split max - PullRequest
       9

Pandas Dataframe str split max

1 голос
/ 16 января 2020

У меня есть фрейм данных со столбцом, который включает отдельные имена. Имена не всегда имеют одинаковый формат, поэтому я пытаюсь разделить имена и фамилии на отдельные столбцы. Например, я могу увидеть:

Smith John

Smith, John

Smith, John A

Smith John A

Smith John and Jane

Последовательный шаблон - это фамилия по имени. Как я могу создать два отдельных поля для фамилии, а затем второй столбец, который не является фамилией. Вот что у меня есть

owners_df['normal_name'] = owners_df['name'].str.replace(', ', ' ')
owners_df['lastname'] = owners_df["normal_name"].str.split(' ', 1)[0]
owners_df['firstname'] = owners_df["normal_name"].str.split(' ', 1)[1]

Проблема в том, что я получаю ошибку «ValueError: Длина значений не соответствует длине индекса»

Ответы [ 2 ]

2 голосов
/ 16 января 2020

Как @Datanovice уже сказал в комментарии "когда вы запускаете этот owners_df["normal_name"].str.split(' ', 1)[0], вы захватываете только первую строку" *

используйте аксессор .str, чтобы получить ожидаемый результат

owners_df['lastname'] = owners_df["normal_name"].str.split(' ', n=1).str[0]
owners_df['firstname'] = owners_df["normal_name"].str.split(' ', n=1).str[1]

См. Документы Обратите внимание на параметр n, чтобы ограничить разделение одним разом.

0 голосов
/ 16 января 2020

Вы ищете .str[0] и .str[1:] после разделения.

ser=pd.Series(['Smith John',
'Smith John',
'Smith John A',
'Smith John A',
'Smith John and Jane'])

ser.str.split(' ').str[0]

0    Smith
1    Smith
2    Smith
3    Smith
4    Smith

#leaving off the .str.join will give a list, which may be preferable in some use cases
ser.str.split(' ').str[1:].str.join(' ') 

0             John
1             John
2           John A
3           John A
4    John and Jane

Если вместо этого вы просто хотите переместить каждый элемент в отдельный столбец, вы можете передать expand=True

ser.str.split(' ', expand=True)

    0       1       2       3
0   Smith   John    None    None
1   Smith   John    None    None
2   Smith   John    A       None
3   Smith   John    A       None
4   Smith   John    and     Jane
...