Подтвердить что ты не робот

Почему я должен сделать копию фрейма данных в pandas

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

Почему они делают копию фрейма данных? Что произойдет, если я не сделаю копию?

4b9b3361

Ответ 1

Это расширяет ответ Павла. В Pandas индексирование DataFrame возвращает ссылку на исходный DataFrame. Таким образом, изменение подмножества изменит исходный DataFrame. Таким образом, вы хотите использовать копию, если хотите убедиться, что исходный DataFrame не должен меняться. Рассмотрим следующий код:

df = DataFrame({'x': [1,2]})
df_sub = df[0:1]
df_sub.x = -1
print(df)

Вы получите:

x
0 -1
1  2

Напротив, следующие листья df не изменяются:

df_sub_copy = df[0:1].copy()
df_sub_copy.x = -1

Ответ 2

Потому что, если вы не делаете копию, индексы все еще можно манипулировать в другом месте, даже если вы назначаете dataFrame другому имени.

Например:

df2 = df
func1(df2)
func2(df)

func1 может изменить df, изменив df2, поэтому, чтобы избежать этого:

df2 = df.copy()
func1(df2)
func2(df)

Ответ 3

Необходимо отметить, что возвращение копии или представления зависит от типа индексации.

Документация pandas гласит:

Возврат представления к копии

Правила о том, когда возвращается представление данных, полностью зависит от NumPy. Всякий раз, когда массив меток или булев вектор участвуют в операции индексирования, результатом будет копия. С однократной индексацией и нарезкой ярлыка/скаляра, например. df.ix [3: 6] или df.ix [:, 'A'], будет возвращено представление.