以下是我的例子:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})

In [3]: df1 = df.rename(columns={'b': 'b'}, copy=False)

In [4]: df1.isetitem(1, [7,8,9])

In [5]: df
Out[5]:
   a  b
0  1  4
1  2  5
2  3  6

In [6]: df1
Out[6]:
   a  b
0  1  7
1  2  8
2  3  9

如果df1是由dfcopy=False导出的,那么我预计df1的就地修改也会影响df.但事实并非如此为什么?

我使用的是Pandas版本2.2.1,没有启用任何选项(例如写入时复制

推荐答案

copy=False表示底层数据(numpy)是共享的.

如果我们修改底层numpy数组的一个项目,它会被反映出来,因为数据是共享的:

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
df1 = df.rename(columns={'b': 'c'}, copy=False)
df1.values[0, 1] = 999

print(df)
   a    b
0  1  999
1  2    5
2  3    6

print(df1)
   a    c
0  1  999
1  2    5
2  3    6

print(id(df.values), id(df1.values))
# 140335530654768 140335530654768

然而,DataFrame对象(容器、索引、列名...)并不相同.

print(id(df), id(df1))
# 140335696175520 140335696171536

通过将新列设置为df1.isetitem(1, [7,8,9]),您只需添加一个新系列并强制复制.

Python相关问答推荐

Pythind 11无法弄清楚如何访问tuple元素

从webhook中的短代码(而不是电话号码)接收Twilio消息

替换字符串中的多个重叠子字符串

pandas滚动和窗口中有效观察的最大数量

为什么这个带有List输入的简单numba函数这么慢

使用groupby Pandas的一些操作

如何创建一个缓冲区周围的一行与manim?

Stacked bar chart from billrame

Pandas DataFrame中行之间的差异

在pandas中使用group_by,但有条件

如何在Python中获取`Genericums`超级类型?

为什么常规操作不以其就地对应操作为基础?

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

当单元测试失败时,是否有一个惯例会抛出许多类似的错误消息?

GPT python SDK引入了大量开销/错误超时

使用Python TCP套接字发送整数并使用C#接收—接收正确数据时出错

操作布尔值的Series时出现索引问题

我怎么才能用拉夫分拣呢?

对于标准的原始类型注释,从键入`和`从www.example.com `?

使用pythonminidom过滤XML文件