当前位置: 首页 > 知识库问答 >
问题:

熊猫:子索引数据帧:副本与视图

养学
2023-03-14

假设我有一个数据帧

import pandas as pd
import numpy as np
foo = pd.DataFrame(np.random.random((10,5)))

我从我的数据子集创建另一个数据帧:

bar = foo.iloc[3:5,1:4]

bar是否保存了foo中这些元素的副本?有没有办法创建该数据的视图?如果是这样,如果我尝试修改此视图中的数据会发生什么情况?Pandas是否提供任何类型的写时拷贝机制?

共有1个答案

充栋
2023-03-14

你的答案在熊猫文档中:返回一个视图与一个副本。

每当索引操作涉及标签数组或布尔向量时,结果将是一个副本。对于单标签/标量索引和切片,例如df.ix[3:6]或df.ix[:,'A'],将返回一个视图。

在您的示例中,barfoo的切片视图。如果您想要副本,可以使用copy方法。修改bar也会修改foo。pandas似乎没有写入复制机制。

请参阅下面的代码示例来说明:

In [1]: import pandas as pd
   ...: import numpy as np
   ...: foo = pd.DataFrame(np.random.random((10,5)))
   ...: 

In [2]: pd.__version__
Out[2]: '0.12.0.dev-35312e4'

In [3]: np.__version__
Out[3]: '1.7.1'

In [4]: # DataFrame has copy method
   ...: foo_copy = foo.copy()

In [5]: bar = foo.iloc[3:5,1:4]

In [6]: bar == foo.iloc[3:5,1:4] == foo_copy.iloc[3:5,1:4]
Out[6]: 
      1     2     3
3  True  True  True
4  True  True  True

In [7]: # Changing the view
   ...: bar.ix[3,1] = 5

In [8]: # View and DataFrame still equal
   ...: bar == foo.iloc[3:5,1:4]
Out[8]: 
      1     2     3
3  True  True  True
4  True  True  True

In [9]: # It is now different from a copy of original
   ...: bar == foo_copy.iloc[3:5,1:4]
Out[9]: 
       1     2     3
3  False  True  True
4   True  True  True
 类似资料:
  • 我有两个数据帧,都有一个键列,可能有重复项,但数据帧大部分都有相同的重复键。我希望在该键上合并这些数据帧,但这样做的方式是,当两者具有相同的副本时,这些副本将分别合并。此外,如果一个数据帧的键的副本比另一个多,我希望它的值填充为NaN。例如: 我正在尝试获得以下输出 所以基本上,我想把复制的K2键当作K2_1,K2_2。。。然后在数据帧上进行how='outer'合并。你知道我怎样才能做到这一点吗

  • 我有一个dataframe,从中删除了一些行。因此,我得到了一个dataframe,其中的索引类似于:,我希望将其重置为。我怎么做?

  • 我想更改我的熊猫数据框架中的一个值,我想我误解了索引的工作方式。 我得到输出 我想将df中的值0.665873更改为1。我试过了 但我得到了错误 我试图用示例数据帧复制该问题,但无济于事。 我认为问题在于,当我使用实际数据时,我得到了一系列的输出,但当我使用实践数据时,得到了一个浮点。为什么我得到的是这个系列而不是浮点0.665873?

  • 获取相应列内容满足条件的索引范围的最有效方法是什么。。类似于以标记开始并以“body”标记结束的行。 例如,数据框如下所示 我要得到行索引1-3 有人能提出最具蟒蛇风格的方法来实现这一点吗?

  • 我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!

  • 我有一个数据框架,myDF,其中一列我希望使用来自其他列的条件和索引与第二个数据框架,标准DF的组合设置为零。 myDF.head(): 标准DF: 然后通过以下for循环运行myDF: 这会产生以下错误: 回溯(最近一次调用): 文件 “”, 第 1 行, in runfile('myscript.py', wdir='C:myscript') 文件“C:\ program data \ ana