为什么 pandas 的DataFrame可以相互改变?

2022-02-21 00:00:00 python pandas oop

问题描述

我正在尝试保留 pandas DataFrame的副本,以便我可以在保存原始数据帧的同时对其进行修改。但当我修改副本时,原始数据帧也会更改。例如:

df1=pd.DataFrame({'col1':['a','b','c','d'],'col2':[1,2,3,4]})
df1

    col1    col2
    a       1
    b       2
    c       3
    d       4

df2=df1
df2['col2']=df2['col2']+1
df1

    col1    col2
    a       2
    b       3
    c       4
    d       5
我将df2设置为等于df1,然后当我修改df2时,df1也会更改。为什么会这样?有没有办法保存 pandas DataFrame的备份(&Q;)而不修改它?

Python

这比数据帧深刻得多:您以错误的方式思考推荐答案变量。Python变量是指针,而不是桶。也就是说,当你写

>>> y = [1, 2, 3]

您没有将[1, 2, 3]放入名为y的存储桶中;而是创建了一个指向[1, 2, 3]的名为y的指针。

当您随后写

>>> x = y

您没有将y的内容放入名为x的存储桶中;您正在创建名为x的指针,该指针指向与y所指向的相同的对象。因此:

>>> x[1] = 100
>>> print(y)
[1, 100, 3]

因为xy指向同一个对象,所以通过一个指针修改它也会修改另一个指针。如果您想指向一个副本,则需要显式创建一个副本。对于列表,您可以这样做:

>>> y = [1, 2, 3]
>>> x = y[:]
>>> x[1] = 100
>>> print(y)
[1, 2, 3]

通过DataFrames,您可以使用copy()方法创建副本:

>>> df2 = df1.copy()

相关文章