Обновление сохраненных значений в питоне для цикла с использованием Pandas Dataframe - PullRequest
0 голосов
/ 10 декабря 2018

Я новичок в Python и Pandas и пытаюсь заменить все нулевые значения в массиве определенным значением.

Каждый раз, когда я запускаю это, обновленные значения не сохраняются.

Я видел, что Pandas не сохраняет изменения при итерации строк ... так как я могу сохранить изменения?

Вот мой код

animal_kinds = set(df.AnimalKind) # this gives categories used below in the "ak" like dog, cat, bird
new_color_dog = 'polka dots'
new_color_cat = 'plaid'
new_color_bird = 'stripes'

for ak in animal_kinds:
    ak_colors = ak['colors']


    ak_with_no_color = animals[(df["Kind"] == ak ) & (df["Color"] == "" ) ] 


    result_count = len(ak_with_no_color)
    if result_count:

        ak_with_no_color.at["Color"] = new_color_ak #sets new color based on kind of animal (ak) 
        print(str(ak) 'color is changed to ' + str(new_color_ak))

1 Ответ

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

Избегайте цепной индексации

Этот вид операции известен как цепная индексация, и он явно не рекомендуется в документах :

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 значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...