2013-11-03 81 views
0

這個問題的靈感來自於this question。我遇到了同樣的問題,通過選擇更新MultiIndex DataFrame。 Pandas 0.13中的drop_level=False解決方案將使我獲得相同的結果,但我仍然想知道爲什麼我無法從MultiIndex DataFrame中獲取視圖。換句話說,爲什麼這樣不行?:如何檢索MultiIndex DataFrame的視圖

>>> sat = d.xs('sat', level='day', copy=False) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 2248, in xs 
    raise ValueError('Cannot retrieve view (copy=False)') 
ValueError: Cannot retrieve view (copy=False) 

當然,這可能是唯一的,因爲它沒有實現,但有一個原因嗎?它在某種程度上是不明確或不可能實現的?對於我來說,返回視圖比直接返回副本,然後更新原始視圖更直觀。我查看了源代碼,似乎明確檢查了這種情況以引發錯誤。

另外,是否有可能從任何其他索引方法獲得相同類型的視圖?我已經嘗試過但沒有成功。

討論了一些潛在的實現here。我想用上面的最後一個問題,我想知道什麼目前最好的解決方案是索引到任意multiindex切片和橫截面。

回答

0

在多d型框架上,這是不可能的;即使是一個單一的D型框架,它也是2個numpy,這使得它不確定。

即使可以使用xs來查看,基本上總是會返回副本。問題是,試圖修改這個想法時非常容易,即實際上您正在修改副本(或者反之亦然),您實際上正在修改底層數據。

(僅供參考在0.13刪除此錯誤以及而會提高/警告,如果你嘗試修改它)

看到這個here的變化。

+0

只是爲了確保我理解正確:您是說由於低級實施細節而無法實現?雖然我們談論這個話題 - 是否有任何討論允許通過字典索引,鍵是索引標籤?我的代碼被設置爲從用戶那裏得到一個字典,但我必須做一些醜陋的轉換才能變成索引元組和標籤列表。就像現在似乎沒有一種使用MultiIndex DataFrames子集的優雅方法。 – ontologist

+0

一個視圖本質上是指向另一個數據塊的開始/停止指針。通常不可能用任意的(幻想)索引來做到這一點,這本質上就是你要求的。作爲第二個問題,我不確定你問什麼。 – Jeff

+0

感謝您的回答,這很有道理。我一直在尋找這個主題,我認爲我的第二個問題是指[提升請求]中提出的問題(https://github.com/pydata/pandas/issues/4036)。由於它似乎是一個實施的問題,我會跟隨大熊貓,希望有一天我會有技能貢獻自己。 – ontologist

相關問題