Избегайте цепной индексации
Этот вид операции известен как цепная индексация, и он явно не рекомендуется в документах :
df[(df['kind'] == 'dog') & (df['colour'] == '')].at['colour'] = 'black'
Вместо этого вычислите, а затем используйте логическую маску:
mask = (df['kind'] == 'dog') & (df['colour'] == '')
df.loc[mask, 'colour'] = 'black'
Используйте словарь для переменного числа переменных
Этот тип операции не работает в Python:
new_colour_dog = 'polka dots'
new_colour+'_dog' # want 'polka dots', but will not work
Вместо этого используйте словарь:
new_colours = {'dog': 'polka dots', 'cat': 'plaid', 'bird': 'stripes'}
Затем можно выполнить итерацию пар ключ-значение вашего словаря:
for animal, new_colour in new_colours.items():
mask = (df['kind'] == animal) & (df['colour'] == '')
df.loc[mask, 'colour'] = new_colour
Вам не нужнотестовые / особые случаи, когда mask
возвращает серию False
значений.