2016-02-05 30 views
3

新手問題:有沒有就地版本的熊貓截斷?就地版本的pandas truncate?

例如

>>> 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的文檔字符串表示存在複製選項,但我不認爲這會影響數據框本身是否被截斷,而是返回的值是數據框的副本還是對數據幀。請參閱下面的我的意思:

>>> 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

你甚至讀過文檔字符串嗎? – Goyo

+0

@Goyo我猜你是指在文檔字符串中提到的複製選項。對不起,在最初的帖子中沒有更清楚。複製選項與就地截斷不同。更新了問題以反映這一點。謝謝。 – oxer

+1

請參閱http://stackoverflow.com/a/22533110/2285236 – ayhan

回答

0

沒有截斷原地的,但低效率與製作可以通過避免副本關聯copy=False(如果可以全部避免拷貝,這並不總是如此):

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

如果您保留對原始對象的引用,它將保持不變,正如您發現的那樣。

請注意,就地操作和副本實際上不相關。就地操作可以複製數據並更新一些內部引用,而使對象保持不變的方法並不總是需要複製數據。