我有一个包含多列的数据框。在其中一列中,存储字符串。我想用新的字符串更改这些字符串上的名称:
这是一个例子:
old_names = ['Adam', 'Alan', 'Andrew', 'Frank', 'Harry', 'Jack',
'Josh', 'Justin', 'Roger', 'Ryan', 'Amanda', 'Betsy', 'Courtney', 'Ellen',
'Heather', 'Katie', 'Kristin', 'Melanie', 'Nancy', 'Stephanie']
new_names = ['Hanna', 'Brayden', 'Brooklyn', 'Ashlynn', 'Joshua',
'Britni', 'Latoya', 'Hunter', 'Kaylie', 'Infant', 'Ashlea', 'Haley',
'Caleb', 'Gage', 'Raheem', 'Mariel', 'Hakeem', 'Lukas', 'Isis', 'Nia']
我想将old_names [0]替换为带有new_names [1]的new_names [0] old_names [1],依此类推。为此,我做了以下事情:
def change_names(data,old,new):
for i in range(len(prev)):
data['Sentence'] = data['Sentence'].str.replace(old[i],new[i])
return data
data = pd.read_csv("mydata.csv")
changed_data = change_names(data,old_names,new_names)
如果我应用这个函数,我将Harry
替换为Latoyaua
,因为它首先用约书亚取代Harry,然后在用Latoya取代Josh时它也用Latoya
替换Joshua的前缀。
我该如何解决这个问题?
编辑
这是数据帧的示例行:
>>> t.loc[220]
Sentence Harry feels angry.
Template <person subject> feels <emotion word>.
Person Harry
Name: 220, dtype: object
您可以执行以下操作:
# create a dictionary of old to new name
map_names = dict(zip(old_names, new_names))
# sample data frame
df = pd.DataFrame({'sentence':['Harry feels angry','Adam is happy','Frank went crazy.']})
# map new names to old names
df['sentence'] = df['sentence'].apply(lambda x: ' '.join(map_names.get(y, y) for y in x.split()))
print(df)
sentence
0 Joshua feels angry
1 Hanna is happy
2 Ashlynn went crazy.