我有一个名称列表,其中所有大写字母,已删除的空格和非字母字符都可以轻松与另一个列表合并-都在pandas数据框中。
一个数据框的名称末尾带有JR
,而另一个数据框中的对应名称不包含此后缀。如何从两者中剥离所有JR
?
我尝试了以下操作:
df['NAME'] = df['NAME'].str.replace('JR','')
但是我认为这将删除JR
的所有实例,而不是最后两个字符时。任何帮助将不胜感激。
答案 0 :(得分:2)
您需要:
def jr_replace(x):
match = re.sub(r'JR$',"",x)
return match
df['NAME'] = df['NAME'].apply(jr_replace)
print(df)
答案 1 :(得分:1)
您可以使用正则表达式替换:
import pandas as pd
df = pd.DataFrame(data=['Name JR', 'Name JR Middle', 'JR Name'], columns=['name'])
df['name'] = df.name.str.replace(r'\bJR$', '', regex=True).str.strip()
print(df)
输出
name
0 Name
1 Name JR Middle
2 JR Name
模式'\bJR$'
仅在字符串的末尾匹配单词JR。
答案 2 :(得分:1)
一种选择是使用JR
删除string.endswith
,然后将其从包含str
对象的行中删除:
m = s.str.endswith('JR')
s.loc[m] = s.loc[m].str[:-2]
示例
使用@danielmesejo的数据框:
df = pd.DataFrame(data=['Name JR', 'Name JR Middle', 'JR Name'], columns=['name'])
m = df.name.str.endswith('JR')
df.name.loc[m] = df.name.loc[m].str[:-2]
name
0 Name
1 Name JR Middle
2 JR Name