Как выполнить замену строки в dataframe - PullRequest
3 голосов
/ 11 апреля 2020

У меня есть кадр данных df, который выглядит следующим образом:

      Company Name     ID
0        Finl Corp    111
1          Fund Tr    222
2          Invt Fd    333           
3          Govt Fd    444
4      Trinity Inc    555

И я заменяю строки, которые обычно сокращаются:

df['Company Name'] = df['Company Name'].str.replace('Finl', 'Financial')
df['Company Name'] = df['Company Name'].str.replace('Tr', 'Trust')
df['Company Name'] = df['Company Name'].str.replace('Invt', 'Investment')
df['Company Name'] = df['Company Name'].str.replace('Fd', 'Fund')
df['Company Name'] = df['Company Name'].str.replace('Govt', 'Government')

Но как я могу заменить Tr с Trust только , когда Tr - это два последних символа строки, например строка 1 (но не строка 4)?

Можно ли что-то сделать как?

df['Company Name'] = df['Company Name'].str.endswith(' Tr').replace(' Tr', ' Trust') так что вывод:

      Company Name    ID  
0   Financial Corp   111
1       Fund Trust   222
2  Investment Fund   333
3  Government Fund   444
4      Trinity Inc   555

Ответы [ 4 ]

6 голосов
/ 12 апреля 2020

вы можете использовать $, чтобы соответствовать концу строки в replace:

df['Company Name'] = df['Company Name'].str.replace(' Tr$', ' Trust')
3 голосов
/ 12 апреля 2020

Замените более чем одну вещь одновременно, используя replace на regex=True:

repl_dict = {'Govt': 'Government', 'Fd$': 'Fund',}                                                                                                  
df['Company Name'].replace({k : v for k, v in repl_dict.items()}, 
                           regex=True)                                                            

0          Finl Corp
1            Fund Tr
2          Invt Fund
3    Government Fund
4        Trinity Inc
Name: Company Name, dtype: object
0 голосов
/ 12 апреля 2020

Вам не нужно str.replace, если вы сначала выделите строки, которые хотите заменить на df.loc, и назначите их соответствующей строке замены:

df.loc[df['Company Name'].str.endswith('Finl')] = 'Financial'

Я предлагаю поставить текст / замену дуэты в словаре и выполните это в al oop, вместо того, чтобы многократно перезаписывать весь столбец df['Company Name'], например:

replace_dict = {'Finl': 'Financial', 
                'Tr': 'Trust', 
                'Invt': 'Investment', 
                'Fd': 'Fund', 
                'Govt': 'Government'}

for k, v in replace_dict.items(): 
    df.loc[df['Company Name'].str.endswith(k)] = v 
0 голосов
/ 12 апреля 2020

Напишите вспомогательную функцию def expand_trust(s):, которая заменяет "Tr" на "Trust".

Затем используйте .apply( ... ) для изменения вашего фрейма данных:

df["Company Name"] = df["Company Name"].apply(expand_trust)

Ваш помощник может использовать .endswith( ... ), но вы можете обнаружить, что $ в регулярном выражении удобнее.

...