我正在修改函数中的数据帧,但不希望它更改全局变量
我使用两种不同的方法更改数据帧,它们对全局变量的影响不同。通过分配不存在的列来添加新列的第一种方法修改全局数据帧。通过连接新列,全局数据帧保持不变
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
def mutation(data):
data['d'] = [1, 2, 3]
mutation(df)
print(df)
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
columns=['a', 'b', 'c'])
def mutation(data):
data = pd.concat([data,pd.DataFrame([1,2,3], columns=['d'])], axis =1)
mutation(df)
print(df)
我希望在调用函数后打印df时会看到a、b和c列。但是,第一种方法也显示了d列
将
data
对象传递给函数时,实际上是将其引用传递给函数。因此,当你在它指向的对象上进行就地突变时,你也可以看到这些功能之外的突变如果要保持原始数据不发生突变,请按如下方式传递原始数据帧的克隆:
输出:
该函数在克隆上运行,因此原始数据帧不会被修改
第二个示例不是对原始数据帧执行就地操作:而是创建一个新的数据帧。因此,在第二个示例中,您的原始DF没有被修改
相关问题 更多 >
编程相关推荐