pandas 将新列添加到DF中并不会传递给DF的浅副本

4szc88ey  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(134)

我有一个非常简单的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


我想问一下为什么我对浅副本所做的更改没有延续到原件上。

oxalkeyp

oxalkeyp2#

我知道在一个浅拷贝中,对一个文件所做的修改应该会延续到原始文件中。所以如果我在copy_df中创建一个新的列(修改),我希望旧的_df也会被修改。
是的,这对于复制之前的所有现有列(Series)都是正确的,但是如果您创建新列,它们将仅添加到当前DataFrame上,因为它们共享对现有列的引用。

# Create new column
copy_df.loc[:, 'new_col'] = [0, 0, 0, 0]  # or copy_df['new_col'] = [0, 0, 0, 0]
print(old_df)

# Output
   values
0      10
1      20
2      30
3      40

个字符

相关问题