Заменить букву в строке панд - PullRequest
0 голосов
/ 31 августа 2018

У меня есть этот фрейм данных:

import pandas as pd

columns = ['ID','Data']
data = [['26A20',123],
        ['12A20',123],
        ['23A20',123]]
df = pd.DataFrame.from_records(data=data, columns=columns)

>>df
      ID  Data
0  26A20   123
1  12A20   123
2  23A20   123

И простая задача - удалить A: s из ID, когда ID начинается с 26 или 23:

df.loc[df['ID'].str.startswith(('23','26'))]['ID'] = df['ID'].str.replace('A','')

SettingWithCopyWarning: значение пытается быть установлено для копии срез из DataFrame. Попробуйте использовать .loc [row_indexer, col_indexer] = значение вместо

И ничего не меняется:

>>df
      ID  Data
0  26A20   123
1  12A20   123
2  23A20   123

Я использую loc, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

И есть np.where() подход:

df['ID'] = np.where(df['ID'].str.startswith(('23','26')), df['ID'].str.replace('A', ''), df['ID'])
0 голосов
/ 31 августа 2018

Удалить двойные ][ во избежание цепных назначений :

df.loc[df['ID'].str.startswith(('23','26')), 'ID'] = df['ID'].str.replace('A','')
print (df)
      ID  Data
0   2620   123
1  12A20   123
2   2320   123

Также возможен фильтр в обе стороны для уменьшения выполнения функции replace:

mask = df['ID'].str.startswith(('23','26'))
df.loc[mask, 'ID'] = df.loc[mask, 'ID'].str.replace('A','')
print (df)
      ID  Data
0   2620   123
1  12A20   123
2   2320   123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...