如何删除特定字符之前的文本-Python(Pandas)

时间:2018-08-27 19:40:11

标签: python string pandas substring series

我在较大的数据集中有一个列,如下所示:

Name
----
Mr. John Doe
Jack Daw
Prof. Charles Winchester
Jane Shaw
... etc.

(名称已匿名)

基本上,是带有前缀混合在一起的名称的列表。所有前缀都以点结尾。到目前为止,前缀仅限于:Dr. Mrs. Dr. and Prof。

我想要的输出是:

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']))

以上返回错误“ TypeError:无法使用这些索引器进行切片索引”

我也尝试过:

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 :(得分:2)

尝试一下:

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

输出:

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