Проблема: при удалении столбца, помеченного 'Happiness_Score' ниже, я удаляю его и в родительском Dataframe. Это не должно произойти, хотели бы получить разъяснения по этому поводу?

A = df_new
A.drop('Happiness_Score', axis = 1, inplace = True)

Это вывод: Как вы можете видеть, столбец также удаляется в df_new; не inplace = True означает, что он удаляется только в A кадре данных.

Output 1

< Сильный > Примечание : Я могу обойти это, изменив код; теперь вывод соответствует ожидаемому.

B=df_new.drop('Happiness_Score', axis = 1)

enter image description here

1
Sumanth Lazarus 27 Июн 2019 в 15:49

3 ответа

Лучший ответ

На самом деле, когда вы делаете A = df_new Вы не создаете копию Dataframe, а просто указатель. Таким образом, чтобы выполнить это правильно, вы должны использовать A = df_new.copy() Когда вы выбираете подмножество или индексируете: A = df_new[condition], он создает копию фрагмента данных, поэтому ваш обходной путь тоже работает.

1
Igor sharm 27 Июн 2019 в 13:06

A = def_new создает новую ссылку на ваш оригинал def_new, а не новую копию. Вы связываете A с тем же def_new, который содержит ссылку на. А что происходит, когда вы делаете изменения в ссылке? Это отражено в оригинальном объекте. Я проиллюстрирую это на примере.

orgList = [1,2,3,4,5]
bkpList = orgList
print(bkpList is orgList) #OUTPUT: True

Это потому, что обе переменные указывают на один и тот же список. Измените любой, и изменение будет отражено в исходном списке. То же самое можно наблюдать в вашем случае с фреймом данных.

Решение: сохраняйте отдельную копию вашего фрейма данных.

2
user7841281user7841281 27 Июн 2019 в 13:06

Переменная A является ссылкой на df_new. Попробуйте создать A, выполнив полный фрагмент df_new или df_new.copy ().

0
krewsayder 27 Июн 2019 в 12:53