假设我有一个数据帧
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是否提供任何类型的写时拷贝机制?
你的答案在熊猫文档中:返回一个视图与一个副本。
每当索引操作涉及标签数组或布尔向量时,结果将是一个副本。对于单标签/标量索引和切片,例如df.ix[3:6]或df.ix[:,'A'],将返回一个视图。
在您的示例中,bar
是foo
的切片视图。如果您想要副本,可以使用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