Python 复制数据帧的两列

Python 复制数据帧的两列,python,pandas,Python,Pandas,我发现在一个数据帧中创建两列的浅拷贝有一些困难 我有以下代码: 将numpy导入为np 作为pd进口熊猫 data=pd.DataFrame(np.zero((5,3)),列=[“a”、“b”、“c”]) 打印(数据) b=数据。loc[:,“a”] b+=1 打印(数据) 通过这种方式,我对数据帧的第一列进行了引用,b+1有效地将1添加到第一列数据中(打印数据时,我可以看到值发生了变化)。 我想做一些类似的事情,但有两列。我注意到,很难,将b定义为b=data.loc[:,[“a”,“b”]

我发现在一个数据帧中创建两列的浅拷贝有一些困难

我有以下代码:

将numpy导入为np
作为pd进口熊猫
data=pd.DataFrame(np.zero((5,3)),列=[“a”、“b”、“c”])
打印(数据)
b=数据。loc[:,“a”]
b+=1
打印(数据)
通过这种方式,我对数据帧的第一列进行了引用,
b+1
有效地将1添加到第一列数据中(打印数据时,我可以看到值发生了变化)。 我想做一些类似的事情,但有两列。我注意到,很难,将b定义为
b=data.loc[:,[“a”,“b”]]
,我得到了我想要的两列,但是变量
b
独立于
data
(更改b不会更改数据中的值)。 我希望有人能帮我解决这个问题

谢谢

洛伦佐

编辑

正如评论中指出的那样,我本应该包括预期的产出。对于上面包含的代码块,输出等于预期值,为:

   a   b   c 
0 0.0 0.0 0.0
1 0.0 0.0 0.0 
2 0.0 0.0 0.0 
3 0.0 0.0 0.0 
4 0.0 0.0 0.0

   a   b   c 
0 1.0 0.0 0.0
1 1.0 0.0 0.0 
2 1.0 0.0 0.0 
3 1.0 0.0 0.0 
4 1.0 0.0 0.0
如果我现在运行代码

将numpy导入为np
作为pd进口熊猫
data=pd.DataFrame(np.zero((5,3)),列=[“a”、“b”、“c”])
打印(数据)
b=数据。loc[:,[“a”,“b”]]
b+=1
打印(数据)
而第二个print语句的预期输出为

abc
0 1.0 1.0 0.0
1 1.0 1.0 0.0 
2 1.0 1.0 0.0 
3 1.0 1.0 0.0 
4 1.0 1.0 0.0
我实际上得到了

abc
0 0.0 0.0 0.0
1 0.0 0.0 0.0 
2 0.0 0.0 0.0 
3 0.0 0.0 0.0 
4 0.0 0.0 0.0

不幸的是,pandas不是一个超级高效的内存库,因此它的大多数操作都不会返回视图,而是一个独立于源代码运行的副本。正如您所指出的那样,像
.loc
这样具有单个列的小操作实际上可以返回视图,但是99%的其他方法在执行任何操作之前复制底层数据并返回该副本。虽然这对某些人来说似乎是一个麻烦,但它可以避免大多数用户在试图操作子集时源数据集中的值发生变化的恼人错误

如果您想要一个零拷贝的数据帧框架,我建议您。虽然我没有亲自使用过它,但我一直在关注这个项目,因为它已经成熟了。它在语法上类似于熊猫,但内存效率更高,甚至可以无缝地处理大于RAM容量的数据集


作为一篇相关文章,我还建议您阅读这篇文章,进一步了解pandas和numpy如何处理视图和副本。

运行代码并检查拼写错误。显示您预期的结果。哦,我很抱歉输入错误,我从我尝试过的一个脚本中复制了代码,但忘了再试一次。我马上更新这个问题。谢谢