新手问题:是否有 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。
谢谢。
没有就地截断,但是可以使用以下方法避免与制作副本相关的低效率copy=False(如果可以完全避免副本,但情况并非总是如此):
df = df.truncate(2,3, copy=False)
正如您所发现的,如果保留对原始对象的引用,它将保持不变。
请注意,就地操作和复制实际上是不相关的。就地操作可以复制数据并更新一些内部引用,而保持对象不变的方法并不总是必须复制数据。
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |