#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, он возвращает наименьший индекс подстроки(например,»», пустое пространство), найденный в строке. Затем вы можете разделить строку по этому индексу и повторно применить вышеуказанное ко второй строке в результирующем списке.