Изменение нескольких кадров данных одновременно

#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()