熊貓在決定從數據框中選擇原始數據框或原始數據視圖的副本時,會使用Panda規則。Pandas使用什麼規則來生成視圖和副本?
如果我有,例如,
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
我明白,一個query
返回一個副本,以便像
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
將對原有數據幀,df
沒有影響。我也明白,標或命名切片返回一個視圖,使分配到這些,比如
df.iloc[3] = 70
或
df.ix[1,'B':'E'] = 222
將改變df
。但是當涉及到更復雜的案例時,我迷失了方向。例如,
df[df.C <= df.B] = 7654321
改變df
,但
df[df.C <= df.B].ix[:,'B':'E']
沒有。
有一個簡單的規則,熊貓正在使用,我只是失蹤?這些具體情況發生了什麼?特別是,如何在滿足特定查詢的數據框中更改所有值(或值的子集)(如我在上面的示例中試圖做的那樣)?
注意:這與this question不一樣;我讀過the documentation,但我沒有受到啓發。我也讀過關於這個主題的「相關」問題,但我仍然想念熊貓正在使用的簡單規則,以及我將如何應用它 - 例如 - 修改值(或值的子集)在滿足特定查詢的數據框中。
這打開了我的眼睛道:「鏈接索引是2個獨立的蟒蛇操作,因此不能可靠*由大熊貓攔截......」這解釋了爲什麼事情似乎飄忽不定的我,爲什麼實驗是行不通的針腳東西下。 – orome
關於第二和第五條規則(看看我是否理解):如果我設置了一些我已經索引的東西(例如'.loc')作爲任務的LHS,它將設置到位(第二條規則);但是在「兩個步驟」中使用相同表現形式的操作,一個是對變量賦值的RHS索引,另一個賦值給該變量不會改變原始數據,因爲第一個詞幹創建副本(第五個規則)。是對的嗎? – orome
這就是我最後的(「從不做」)例子 - 第一個索引,[df.C <= df.B]'得到一個副本(第五條規則),而第二個'.ix [ :,'B':'E']',是(無關緊要,因爲第一次得到一份副本)設置(第二條規則)。 – orome