#python #pandas
#python #панды
Вопрос:
У меня есть фрейм данных с именем df2, который выглядит следующим образом:
И я хочу заменить все имена моделей, которые содержат строку «ZOE» или другое ключевое слово, просто «ZOE», учитывая, что это марка «RENAULT» или другая марка. Итак, например, я хочу, чтобы ZOE DYNMAIQUE включал АВТО -> АВТО, и если модель не содержит строки с символами «ZOE», я хочу, чтобы она сохранила свое имя модели.
Я новичок в python, и я безуспешно пробовал приведенный ниже код.
df2['Model'] = df2['Model'].apply(lambda x: 'ZOE' if df1['Make']df2['Make'] == 'RENAULT' amp; df2['Model'].str.contains('ZOE') else df2['Model'])
Ошибка, которую я получаю, «другое» должно быть pandas.NA или bool. Вместо этого получил str.
Был бы очень признателен за любую помощь или указания на то, где я ошибаюсь.
Спасибо!
Комментарии:
1. Добро пожаловать в StackOverflow! Один вопрос: вы используете комбинацию
df1
иdf2
, это правильно? Мне это кажется неправильным2. Привет
Да, моя ошибка, я неправильно ввел его в stackoverflow. Теперь я отредактировал его в stackoverflow. Все они должны быть df2
3. Не уверен, но похоже, что вы
x
нигде не используете свой лямбда-код. Попробуйте заменитьdf2
наx
?
Ответ №1:
Прежде всего, поскольку вам нужны оба столбца ‘Model’ и ‘Make’ в вас lambda
, вам нужно применить лямбда ко всем df2
(или, по крайней мере, к df2[['Model', 'Make']]
. Кроме того, вы хотите выполнять цикл по строкам фреймов данных, поэтому вам нужно передать аргумент axis = 1
в apply
(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.apply.html ). Затем, как предложено в комментариях, для доступа к содержимому строк вы должны использовать x
and not df2
. Итак (после еще нескольких изменений) я бы попробовал что-то вроде этого:
df2['Model'] = df2.apply(lambda x: 'ZOE' if (x['Make'] == 'RENAULT') amp; ('ZOE' in x['Model']) else x['Model'], axis=1)