Как изменить точное вхождение имени в ячейке данных pandas - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть датафрейм с несколькими столбцами.В одном из столбцов хранятся строки.Я хочу изменить имя в этой строке новыми:

Вот пример:

    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 [0] old_names [1] с новыми именами [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, потому что сначала она заменяет Гарри Джошуа, а затем, заменяя Джоша Латойей, она также заменяетПрефикс Джошуа с Latoya.

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ

Это пример строки из кадра данных:

>>> t.loc[220]
Sentence                            Harry feels angry.
Template        <person subject> feels <emotion word>.
Person                                           Harry
Name: 220, dtype: object

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете сделать следующее:

# 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...