2 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個贊
這是規(guī)則,后續(xù)覆蓋:
所有操作都會生成副本
如果
inplace=True
提供,它將就地修改; 只有一些操作支持這一點(diǎn)設(shè)置的索引器,例如
.loc/.iloc/.iat/.at
將設(shè)置到位。獲取單個dtyped對象的索引器幾乎總是一個視圖(取決于內(nèi)存布局,它可能不是這就是為什么這不可靠)。這主要是為了提高效率。(上面的示例是for
.query
;這將始終返回一個副本作為其評估者numexpr
)獲取多重對象對象的索引器始終是副本。
你的榜樣 chained indexing
df[df.C <= df.B].loc[:,'B':'E']
不能保證工作(因此你永遠(yuǎn)不會這樣做)。
相反:
df.loc[df.C <= df.B, 'B':'E']
因?yàn)檫@更快,并將始終有效
鏈?zhǔn)剿饕?個獨(dú)立的python操作,因此不能被pandas可靠地?cái)r截(你經(jīng)常會得到一個SettingWithCopyWarning
,但這也不是100%可檢測的)。您指出的開發(fā)文檔提供了更全面的解釋。

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個贊
pandas依賴于numpy來確定是否生成了視圖。在單個dtype情況下(對于一個系列可以是1-d,對于幀可以是2-d)。numpy 可能會生成一個視圖; 這取決于你正在切片的東西; 有時(shí)你可以得到一個觀點(diǎn),有時(shí)你不能。大熊貓完全不依賴于這個事實(shí),因?yàn)橐晥D是否生成并不總是很明顯。但這并不重要,因?yàn)閘oc在設(shè)置時(shí)不依賴于此。然而,當(dāng)鏈索引這是非常重要的(因此為什么鏈索引是壞的)
添加回答
舉報(bào)