python中本地数据帧和全局数据帧之间的链接如何

2024-03-28 11:59:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在修改函数中的数据帧,但不希望它更改全局变量

我使用两种不同的方法更改数据帧,它们对全局变量的影响不同。通过分配不存在的列来添加新列的第一种方法修改全局数据帧。通过连接新列,全局数据帧保持不变

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列


Tags: columns数据方法函数dataframedfdatadef
1条回答
网友
1楼 · 发布于 2024-03-28 11:59:01

data对象传递给函数时,实际上是将其引用传递给函数。因此,当你在它指向的对象上进行就地突变时,你也可以看到这些功能之外的突变

如果要保持原始数据不发生突变,请按如下方式传递原始数据帧的克隆:

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.copy())
print(df) 

输出:

   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9  

该函数在克隆上运行,因此原始数据帧不会被修改

第二个示例不是对原始数据帧执行就地操作:而是创建一个新的数据帧。因此,在第二个示例中,您的原始DF没有被修改

相关问题 更多 >