Как нарезать столбец панды с помощью списка индексов?

#python #pandas

Вопрос:

Я пытаюсь извлечь первые два слова из строки в фрейме данных

df[«Имя»]

      Name                            
     Anthony Frank Hawk               
     John Rodney Mullen               
     Robert Dean Silva Burnquis
     Geoffrey Joseph Rowley 
 

Чтобы получить индекс второго » «(пробел) Я пытаюсь это сделать, но вместо этого нахожу return NaN, возвращающее количество символов до второго пробела.

 df["temp"] = df["Name"].str.find(" ") 1
df["temp"] = df["Status"].str.find(" ", start=df["Status"], end=None)
df["temp"]
0   NaN
1   NaN
2   NaN
3   NaN
 

и последний шаг-срезать эти имена, я пробую этот код, но не получается.

 df["Status"] = df["Status"].str.slice(0,df["temp"])
df["Status"]
0   NaN
1   NaN
2   NaN
3   NaN

expected return

0   Anthony Frank
1   John Rodney
2   Robert Dean
3   Geoffrey Joseph
 

если у вас есть более эффективный способ сделать это, пожалуйста, дайте мне знать!?

Ответ №1:

 df['temp'] = df.Name.str.rpartition().get(0)
df
 

Выход

     Name                        temp
0   Anthony Frank Hawk          Anthony Frank
1   John Rodney Mullen          John Rodney
2   Robert Dean Silva Burnquis  Robert Dean Silva
3   Geoffrey Joseph Rowley      Geoffrey Joseph
 

Редактировать

Если в выводе требуются только первые два элемента.

 df['temp'] = df.Name.str.split().str[:2].str.join(' ')
df
 

или

 df['temp'] = df.Name.str.split().apply(lambda x:' '.join(x[:2]))
df
 

или

 df['temp'] = df.Name.str.split().apply(lambda x:' '.join([x[0], x[1]]))
df
 

Выход

     Name                        temp
0   Anthony Frank Hawk          Anthony Frank
1   John Rodney Mullen          John Rodney
2   Robert Dean Silva Burnquis  Robert Dean
3   Geoffrey Joseph Rowley      Geoffrey Joseph
 

Комментарии:

1. Если у имени более 3 имен, это не работает, как «Роберт Дин Сильва Бернкис», вернется «Роберт Дин Сильва».

2. Отредактировал ответ для извлечения только первых двух элементов из строки.

Ответ №2:

Вы можете использовать str.индекс(подстроку) вместо str.find, он возвращает наименьший индекс подстроки(например,»», пустое пространство), найденный в строке. Затем вы можете разделить строку по этому индексу и повторно применить вышеуказанное ко второй строке в результирующем списке.