Как удалить текст перед конкретным символом - Python (Pandas) - PullRequest
0 голосов
/ 27 августа 2018

У меня есть столбец в наборе данных большего размера, который выглядит следующим образом:

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. Я не уверен, как сохранить оба.

Что не так?

1 Ответ

0 голосов
/ 27 августа 2018

Попробуйте это:

df['Name'].str.split('\.').str[-1].str.strip()

Выход:

0              John Doe
1              Jack Daw
2    Charles Winchester
3             Jane Shaw
Name: Name, dtype: object
...