我在较大的数据集中有一个列,如下所示:
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。我不确定如何保留两者。
出了什么问题?
答案 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