我有一个非常简单的df,我将做一个浅拷贝。
# assign dataframe
old_df = pd.DataFrame({'values': [10, 20, 30, 40]})
# shallow copy
copy_df = old_df.copy(deep=False)
字符串
我知道在一个浅拷贝中,对一个文件所做的修改应该会延续到原始文件中。所以如果我在copy_df中创建一个新的列(修改),我希望旧的_df也会被修改。
我尝试用两种方法创建一个新列。
# method 1
copy_df.loc[:, 'new_col'] = [0, 0, 0, 0]
# method 2
copy_df['new_col'] = [0, 0, 0, 0]
型
我的预期结果如下:
>>> old_df
values new_col
0 10 0
1 20 0
2 30 0
3 40 0
型
但我从这两种方法中得到的是原始的,未更改的df:
>>> old_df
values
0 10
1 20
2 30
3 40
型
我想问一下为什么我对浅副本所做的更改没有延续到原件上。
2条答案
按热度按时间rsl1atfo1#
这是pandas v1.4之后的预期行为:https://github.com/pandas-dev/pandas/issues/47703
oxalkeyp2#
我知道在一个浅拷贝中,对一个文件所做的修改应该会延续到原始文件中。所以如果我在copy_df中创建一个新的列(修改),我希望旧的_df也会被修改。
是的,这对于复制之前的所有现有列(
Series
)都是正确的,但是如果您创建新列,它们将仅添加到当前DataFrame
上,因为它们共享对现有列的引用。个字符