Python:将Dataframe分配给第二个变量,改变第二个Dataframe会改变第一个变量
我不知道这是怎么回事,也许你能帮我。我将一个数据帧分配给第二个变量,然后重新缩放第二个数据帧,使每列的平均值为0,方差为1。这样做之后,第一个数据帧也会以同样的方式改变?!这是怎么发生的?我试着做同样的赋值,然后把第二个变量设为0,看看问题是否在于,两个变量指向相同的数据。但这不会改变第一个数据帧。这是我的密码:Python:将Dataframe分配给第二个变量,改变第二个Dataframe会改变第一个变量,python,pandas,dataframe,Python,Pandas,Dataframe,我不知道这是怎么回事,也许你能帮我。我将一个数据帧分配给第二个变量,然后重新缩放第二个数据帧,使每列的平均值为0,方差为1。这样做之后,第一个数据帧也会以同样的方式改变?!这是怎么发生的?我试着做同样的赋值,然后把第二个变量设为0,看看问题是否在于,两个变量指向相同的数据。但这不会改变第一个数据帧。这是我的密码: import numpy as np import pandas as pd firstDF = pd.DataFrame([[1,2],[3,4]]) firstDF.column
import numpy as np
import pandas as pd
firstDF = pd.DataFrame([[1,2],[3,4]])
firstDF.columns = ['firstColumn', 'secondColumn']
secondDF=firstDF
print(firstDF)
print(secondDF)
for i in secondDF.columns:
secondDF[i]=(secondDF[i]-np.mean(secondDF[i]))/np.std(secondDF[i])
print(firstDF)
print(secondDF)
输出为:
firstColumn secondColumn
0 1 2
1 3 4
firstColumn secondColumn
0 1 2
1 3 4
firstColumn secondColumn
0 -1.0 -1.0
1 1.0 1.0
firstColumn secondColumn
0 -1.0 -1.0
1 1.0 1.0
我对编码的理解正在崩溃!请帮忙 这样做:
secondDF=firstDF.copy()
这将创建您的firstDF
的副本。和firstDF
将保持不变。执行以下操作:
secondDF=firstDF.copy()
这将创建您的
firstDF
的副本。而firstDF
将保持不变。我建议您这样做:
firstDF=pd.DataFrame([[1,2],[3,4]])
secondDF=firstDF.copy()
这将按照Mayank的建议创建一个副本。
但我不知道你想做什么。
是否要创建副本?
您能再澄清一下吗?我建议您这样做:
firstDF=pd.DataFrame([[1,2],[3,4]])
secondDF=firstDF.copy()
这将按照Mayank的建议创建一个副本。
但我不知道你想做什么。
是否要创建副本?
你能再澄清一下吗?
secondDF
和firstDF
是指向同一对象的指针。您需要执行secondDF=firstDF.copy()
。正如Quang Hoang所说,list
和任何其他类对象,如dict
或tuple
,都是由变量引用的,也就是说a=list()
实际上是将指向内部列表对象的指针分配给a
secondDF
和firstDF
是指向同一对象的指针。您将需要执行secondDF=firstDF.copy()
。正如Quang Hoang所说,list
和任何其他类对象,如dict
或tuple
都是由变量引用的,所以说a=list()
实际上是将一个指向内部列表对象的指针分配给a
。我从来不知道这一点。在Java或Matlab中是相同的吗?因为我从来没有遇到过这个问题。我想做一个复制,因为我需要改变对象本身,但也相应地改变其他对象。因此,我需要制作一个副本,以便能够以同样的方式修改其他对象。因此,当我执行secondDF=firstDF时,secondDF=0 firstDF没有改变,因为我将指针secondDF放在0而不是firstDF?但是我怎样才能在指针指向的对象的改变和指针目标的改变之间做出区别呢?这两种情况都发生在=上。为了回答你问题的第一部分,坦率地说,我对Java或Matlab一无所知。但在本例中,假设您更改了列的值并在函数中使用它。后来,您意识到您再次需要原始数据。因此,创建一个拷贝实际上会阻止原始数据被意外地改变。抱歉,我只用了C++中的指针。但我想你真的不需要指针,我从来不知道。在Java或Matlab中是相同的吗?因为我从来没有遇到过这个问题。我想做一个复制,因为我需要改变对象本身,但也相应地改变其他对象。因此,我需要制作一个副本,以便能够以同样的方式修改其他对象。因此,当我执行secondDF=firstDF时,secondDF=0 firstDF没有改变,因为我将指针secondDF放在0而不是firstDF?但是我怎样才能在指针指向的对象的改变和指针目标的改变之间做出区别呢?这两种情况都发生在=上。为了回答你问题的第一部分,坦率地说,我对Java或Matlab一无所知。但在本例中,假设您更改了列的值并在函数中使用它。后来,您意识到您再次需要原始数据。因此,创建一个拷贝实际上会阻止原始数据被意外地改变。抱歉,我只用了C++中的指针。但我想你真的不需要指针