Замена выглядит как диапазон элементов в столбце с набором новых значений, а остальные задаются равными 0 - PullRequest
0 голосов
/ 11 декабря 2018

Для фрейма данных я заменил набор элементов в столбце с диапазоном значений следующим образом:

df['borough_num'] = df['Borough'].replace(regex=['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'], value=[1, 2, 3, 4,5])

Проблема, которую я хочу заменить всеми остальными элементами в 'Borough', чтоне упоминалось ранее со значением 0 также мне нужно использовать регулярное выражение, потому что есть похожи на данные, например.07 BRONX, мне тоже нужно его заменить на 5 не 0

Ответы [ 2 ]

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

Или еще короче, используйте map:

df['borough_num']=df['Borough'].map(dict(zip(['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'],[1, 2, 3, 4,5])))

А теперь:

print(df)

Как и ожидалось.

Обновление:

df['borough_num']=df['Borough'].str.replace('\d+','').map(dict(zip(['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX'],[1, 2, 3, 4,5])))
0 голосов
/ 11 декабря 2018

Из предыдущего вопроса, используя replace, о том, почему он работает, вы можете проверить ссылку

s=df.Borough.replace(dict(zip(l,[1,2,3,4,5])),regex=True)
pd.to_numeric(s,errors = 'coerce').fillna(0).astype(int)
Out[44]: 
0    3
1    5 # notice here still change to 5 
2    1
3    2
4    0
Name: Borough, dtype: int32

Ввод данных

df = pd.DataFrame({
    'Borough': ['QUEENS', 'BRONX 777', 'MANHATTAN', 'BROOKLYN', 'INVALID']})
l = ['MANHATTAN', 'BROOKLYN', 'QUEENS', 'STATEN ISLAND','BRONX']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...