У меня есть столбец в наборе данных большего размера, который выглядит следующим образом:
Name
----
Mr. John Doe
Jack Daw
Prof. Charles Winchester
Jane Shaw
... etc.
(анонимные имена)
По сути, это список имен, в которых есть префиксы. Все префиксы заканчиваются точкой. До сих пор префиксы были ограничены: г-н миссис д-р и проф.
Вывод, который я хотел бы получить:
Name
----
John Doe
Jack Daw
Charles Winchester
Jane Shaw
... etc.
В идеале я хотел бы получить решение, которое опирается на положение точки вместо необходимости создавать несколько условий if (или что-то эквивалентное). Вот что я пытался сделать, и где это пошло не так:
def mid(s, offset, amount):
return s[offset:offset+amount]
print(mid(Sample_Raw_Emp_Data['Name'],Sample_Raw_Emp_Data['Name'].str.find('.'),len(Sample_Raw_Emp_Data['Name'])))
Sample_Raw_Emp_Data['Name']=mid(Sample_Raw_Emp_Data['Name'],Sample_Raw_Emp_Data['Name'].str.find('.'),len(Sample_Raw_Emp_Data['Name']))
Вышеприведенное возвратило ошибку «Ошибка типа: невозможно выполнить индексацию среза этими индексаторами»
Я тоже пробовал:
print(Sample_Raw_Emp_Data['Name'][(Sample_Raw_Emp_Data['Name'].str.find('.')):])
Та же ошибка, что и выше
Другой подход:
Sample_Raw_Emp_Data['Name']=Sample_Raw_Emp_Data['Name'].str.rsplit('.', expand=True,n=1)[1]
Результат выглядел так:
Name
----
John Doe
None
Charles Winchester
None
... etc.
Экземпляры, которые раньше имели префикс, остались, а остальные стали None. Я не уверен, как сохранить оба.
Что не так?