pandas 截断的就地版本?

oxe*_*xer 5 python pandas

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

例如

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

返回一个新的截断数据框。我可以

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

但这似乎效率低下。有没有一种方法可以进行更有效的截断,即不进行复制,而是就地截断?或者这种效率不是由于一些超级聪明的 pandas 设计而成为问题吗?

请注意,截断的文档字符串说有一个复制选项,但我认为这不会影响数据帧本身是否被截断,而是影响返回的值是数据帧的副本还是对数据帧的一部分的引用。请参阅下面的内容了解我的意思:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

谢谢。

Sto*_*ica 2

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

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

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

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