我正在尝试保留 Pandas 数据框的副本,以便我可以在保存原始数据的同时对其进行修改。但是当我修改副本时,原始数据框也会发生变化。前任:
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
Run Code Online (Sandbox Code Playgroud)
我设置df2等于df1,然后当我修改时df2,df1也改变了。为什么会这样,有什么方法可以在不修改的情况下保存熊猫数据框的“备份”?
jak*_*vdp 10
这比数据帧要深刻得多:您正在以错误的方式考虑 Python 变量。Python 变量是指针,而不是桶。也就是说,当你写
>>> y = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
您没有放入[1, 2, 3]名为y;的桶中。而是要创建一个命名指针y指向[1, 2, 3]。
当你然后写
>>> x = y
Run Code Online (Sandbox Code Playgroud)
您没有将 的内容y放入名为 的存储桶中x;要创建一个命名指针x指向同一件事那个y点。因此:
>>> x[1] = 100
>>> print(y)
[1, 100, 3]
Run Code Online (Sandbox Code Playgroud)
因为xandy指向同一个对象,通过一个指针修改它也会为另一个指针修改它。如果您想指向一个副本,则需要明确创建一个副本。使用列表,您可以这样做:
>>> y = [1, 2, 3]
>>> x = y[:]
>>> x[1] = 100
>>> print(y)
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
使用数据帧,您可以使用以下copy()方法创建副本:
>>> df2 = df1.copy()
Run Code Online (Sandbox Code Playgroud)
您需要复印:
df2 = df1.copy()
df2['col2'] = df2['col2'] + 1
print(df1)
Run Code Online (Sandbox Code Playgroud)
输出:
col1 col2
0 a 1
1 b 2
2 c 3
3 d 4
Run Code Online (Sandbox Code Playgroud)
df1您只需为with创建第二个名称df2 = df1。
| 归档时间: |
|
| 查看次数: |
3608 次 |
| 最近记录: |