新手问题:是否有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。
感谢。
答案 0 :(得分:0)
就地没有截断,但使用copy=False
可以避免与复制相关的低效率(如果可以完全避免复制,情况并非总是如此):
df = df.truncate(2,3, copy=False)
如果您保留对原始对象的引用,它将保持不变,但正如您所发现的那样。
请注意,就地操作和副本实际上是不相关的。就地操作可以复制数据并更新一些内部引用,而保持对象不变的方法不一定要复制数据。