大熊猫截断的就地版本?

时间:2016-02-05 16:30:05

标签: python pandas

新手问题:是否有pandas截断的就地版本?

例如

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> df.truncate(2,3)

返回一个新的截断数据框。我能做到

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> df = df.truncate(2,3)

但这似乎效率低下。有没有办法做一个更有效的截断,它不会复制但是就地截断?或者,由于一些超级聪明的熊猫设计,这种效率不是问题吗?

请注意,truncate的docstring表示存在复制选项,但我认为这不会影响数据帧本身是否被截断,而是返回的值是数据框的副本还是对数据框的一部分的引用数据框。请参阅下文,了解我的意思:

>>> df = pandas.DataFrame({'stuff':range(5)}, index=range(5))
>>> cp = df.truncate(2,3, copy=False)
>>> df
   stuff
0      0
1      1
2      2
3      3
4      4
>>> cp['stuff'][2] = -50
>>> df
   stuff
0      0
1      1
2    -50
3      3
4      4

请注意,当我们使用copy=False时,df仍然没有被截断,但返回的对象是df的一个片段,当修改它时也会修改df。

感谢。

1 个答案:

答案 0 :(得分:0)

就地没有截断,但使用copy=False可以避免与复制相关的低效率(如果可以完全避免复制,情况并非总是如此):

df = df.truncate(2,3, copy=False)

如果您保留对原始对象的引用,它将保持不变,但正如您所发现的那样。

请注意,就地操作和副本实际上是不相关的。就地操作可以复制数据并更新一些内部引用,而保持对象不变的方法不一定要复制数据。