我创建了一个数据帧的副本,以便在应用之前在ipython笔记本中测试一些数据转换
datatest = data
datatest.LAST_RENEWAL_CHANNEL.replace(to_replace="Direct.+", value="Direct", inplace=True, regex=True) # combining direct channels
测试后我尝试比较差异
print(datatest.LAST_RENEWAL_CHANNEL.value_counts())
print(data.LAST_RENEWAL_CHANNEL.value_counts())
但两者都有完全相同的结果,显然原始数据已经改变了!
我后来用.copy()修复了这个问题。我的问题是,datatest = data
是否只是制作新的数据框?因此,当我在ipython笔记本中重新运行此单元格时,它会影响我的原始data
?
答案 0 :(得分:0)
这就是python处理对象的方式。
变量是对存储在存储器中的数据的引用,例如语句x=[1,2,3,4,5]
将此列表放入内存并使用x
来访问它。如果您再分配y = x
,则创建另一个列表引用,因此,如果更改x,则还要更改y:
>>> x = [1,2,3,4,5]
>>> y=x
>>> x[1] = 99
>>> print(y)
[1, 99, 3, 4, 5]
例如,参见copy
上的Python文档