#python #pandas #dataframe
Вопрос:
У меня есть два фрейма данных, с которыми я работаю: df и df1. Они содержат точно такие же столбцы. Я пытался удалить один и тот же столбец из обоих с помощью цикла (чтобы избежать копирования/вставки моего кода). Я попробовал два варианта. Один сработал, а другой нет, так что мне было интересно, почему….
Вариант 1 (Проработан):
x = [df, df1]
for i in x:
i.drop(['val'], axis = 1, inplace=True )
Вариант 2 (Не удалось):
x = [df, df1]
for i in x:
i = i[['date', 'time', 'a', 'b']].copy() #keeping all the variables except the one I want to drop.
P.S. под «не удалось» я подразумеваю, что мне удалось запустить код, но мои фреймы данных не были изменены.
Комментарии:
1. Вам здесь не нужно
copy
, фрейм данных будет таким же послеcopy
2. Вам нужно
copy
или вы рискуете получить предупреждение о настройке в будущем. К тому времени может быть не очевидно, какая строка кода вызвала проблему
Ответ №1:
Причина-ссылки на указатели.
# You are modifying df and df1 directly
# i is simply a pointer to the objects at the same addresses
for i in [df, df1]:
i.drop(['val'], axis = 1, inplace=True )
for i in [df, df1]:
# You create a new object and point i to it.
# However, this object is immediately discarded because i is assigned to
# the next item in the iteration list. df and df1 were never modified
i = i[['date', 'time', 'a', 'b']].copy()