我试图保留一个Pandas Dataframe 的副本,这样我可以在保存原始 Dataframe 的同时修改它。但是当我修改副本时,原始 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 的“备份”而不对其进行修改?
3条答案
按热度按时间jmo0nnb31#
这比 Dataframe 要深刻得多:你对Python变量的理解是错误的。Python变量是指针,而不是桶。也就是说,当你写
您没有将
[1, 2, 3]
放入名为y
的存储桶中;而是创建一个指向[1, 2, 3]
的名为y
的指针。当你接着写
您没有将
y
的内容放入名为x
的桶中;您正在创建一个名为x
的指针,它指向的 * 与y
指向的 * 相同。因此:因为
x
和y
指向同一个对象,所以通过一个指针修改它也会修改另一个指针的对象。如果你想指向一个副本,你需要显式地创建一个副本。使用列表,你可以这样做:使用DataFrame,您可以使用
copy()
方法建立复本:bqucvtff2#
您需要制作一份副本:
输出量:
您只需使用
df2 = df1
为df1
创建第二个名称。ssm49v7z3#
当您将一个数据框设置为等于另一个数据框时,它会在计算机内存中保持其数据的相同位置。这意味着如果您更改新数据框中的一个值,它也会更改旧数据框中的该值。要解决此问题,您应该制作一个数据框的副本,而不仅仅是使其等于原始数据框。示例:
df2 = df1.copy()