【发布时间】:2016-06-10 11:03:16
【问题描述】:
我正在尝试保留 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 的“备份”而不对其进行修改?
【问题讨论】:
-
这是因为您只是将
df2设为df1的同义词。它们指的是同一个对象。要改变这一点,我相信你可以做到df2 = df1.copy()。 -
这是一个 Python 问题,与 Pandas 无关。当你做你的任务时,你会得到一个指向同一个对象的指针。您可以通过在 IDE 中键入
id(df2)和id(df1)来确认这一点,注意它们的值是相同的(id返回变量引用的对象的内存位置)。您可以对列表执行相同的操作。list_1 = [1, 2]list_2 = list_1list_2[0] = 10>>> list_1返回 [10, 2] -
nedbatchelder.com/text/names.html 可能会帮助您了解一些相关的知识