Python 将值指定给dataframe的副本时,原始值也会更改
我提供了一个关于我的问题的简化示例: 我有这样一个数据框:Python 将值指定给dataframe的副本时,原始值也会更改,python,pandas,dataframe,Python,Pandas,Dataframe,我提供了一个关于我的问题的简化示例: 我有这样一个数据框: cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'], 'Price': [22000,25000,27000,35000] } df = pd.DataFrame(cars, columns = ['Brand','Price'], index=['Car_1','Car_2','Car_3','Car_4'
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand','Price'], index=['Car_1','Car_2','Car_3','Car_4'])
print (df)
Brand Price
Car_1 Honda Civic 22000
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
print (copy_df)
Brand Price
Car_1 0 0
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
如果我打印它,它看起来像这样:
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand','Price'], index=['Car_1','Car_2','Car_3','Car_4'])
print (df)
Brand Price
Car_1 Honda Civic 22000
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
print (copy_df)
Brand Price
Car_1 0 0
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
现在我想创建它的一个副本,只将副本eqaul的第一行设为零,如下所示:
copy_df=df
copy_df.iloc[0]=0
我的期望是,只有副本的第一行,copy\u df
会这样更改:
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
df = pd.DataFrame(cars, columns = ['Brand','Price'], index=['Car_1','Car_2','Car_3','Car_4'])
print (df)
Brand Price
Car_1 Honda Civic 22000
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
print (copy_df)
Brand Price
Car_1 0 0
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
但是当我现在打印df
时,它的第一行也会受到影响:
print (df)
Brand Price
Car_1 0 0
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
我的期望是不应该更改df
中的第一行
有人能澄清一下吗?你是这样复印的吗
df_copy=df.copy()
你是这样复印的吗
df_copy=df.copy()
在python中,某些数据类型的默认值是通过引用分配副本。在python中,这称为。我会让你自己熟悉这个想法,因为它也会出现在列表的实现中。它与的概念非常相似(但不尽相同)——也许你更熟悉这些术语 在Matlab中,一切都是通过值传递的。因此,如果您有一个列表,那么将复制所有值。而在python数据帧的这种情况下,则复制/分配变量的内存地址 为了解决这个问题,您应该使用df.copy()方法来实际复制当前状态下的数据帧 易变性和按引用传递有很好的/有用的用途,但当它来自其他语言时可能会令人困惑
copy_df = df.copy()
在python中,某些数据类型的默认值是通过引用分配副本。在python中,这称为。我会让你自己熟悉这个想法,因为它也会出现在列表的实现中。它与的概念非常相似(但不尽相同)——也许你更熟悉这些术语 在Matlab中,一切都是通过值传递的。因此,如果您有一个列表,那么将复制所有值。而在python数据帧的这种情况下,则复制/分配变量的内存地址 为了解决这个问题,您应该使用df.copy()方法来实际复制当前状态下的数据帧 易变性和按引用传递有很好的/有用的用途,但当它来自其他语言时可能会令人困惑
copy_df = df.copy()
copy_df=df
不创建df副本的。它生成一个新名称copy_df,该名称引用同一对象。df.copy()
是您实际生成copy@JohnGordon这只是Python中的吗?据我记忆,在Matlab中,这是一个副本,我很困惑…在某些语言中,a=b
将复制b。但不是python。请参见不创建df副本的copy_df=df
。它生成一个新名称copy_df,该名称引用同一对象。df.copy()
是您实际生成copy@JohnGordon这只是Python中的吗?据我记忆,在Matlab中,这是一个副本,我很困惑…在某些语言中,a=b
将复制b。但不是python。请参见