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


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

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

4 78

4 ответа:

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

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

вы получите:

x
0 -1
1  2

В противоположность этому, следующие листья ДФ неизменным:

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

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

например:

df2 = df
func1(df2)
func2(df)

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

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

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

в документации панды говорится:

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

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

в целом безопаснее работать с копиями, чем с исходными кадрами данных, за исключением тех случаев, когда вы знаете, что вам больше не понадобится оригинал и вы хотите продолжить работу с обработанной версией. Обычно вы все равно будете использовать исходный фрейм данных для сравнения с обработанной версией и т. д. Поэтому большинство людей работают над копиями и сливаются в конце.