我只是想知道為什么 Pandas DataFrame 類函式不改變它們的實體。例如,如果我使用 pd.DataFrame.rename()、dropn(),我需要通過重新定義它來更新實體。但是,如果它的類是串列,則可以通過 pop() 方法洗掉元素而無需重新定義它。該函式更改其內在實體。
pandas 或 numpy 使用這種風格有什么原因嗎?你能解釋為什么這種樣式更好或它的優點嗎?
uj5u.com熱心網友回復:
Pandas 已向用戶提供此選項。您提到的函式中的“就地”引數適用于此。如果將 inplace 引數設定為 True,它將對原始 DataFrame 執行操作。我留下了一些關于它的有用鏈接。
https://towardsdatascience.com/learn-how-to-use-pandas-inplace-parameter-once-and-for-all-5a29bb8bf338
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
最良好的問候
uj5u.com熱心網友回復:
原因是允許選項覆寫您正在處理的資料幀物件,或者通過創建副本并將其分配給不同的變數來保持不變。該選項很有價值,因為根據您可能希望直接修改原始資料的情況。
該inplace引數是您有權在兩個選項之間進行選擇的一種方式。
uj5u.com熱心網友回復:
每個類都定義了哪些更改可以完成in-place,哪些不能完成,而是創建一個新物件。原因多種多樣,不能歸結為幾個簡單的規則。
a 的底層資料結構list是為增長和收縮而設計的。即便如此,有些變化還是cheaper比其他的。 append與pop在開始或中間添加或洗掉專案相比,最后需要對資料進行更少的更改。即便如此,諸如blist = alist[1:]生成新串列之類的操作也是如此。
tuple是list不可變的變體,廣泛用于基礎 Python 中的函式引數和打包/解包結果。
甲numpy陣列具有固定的大小。與串列一樣,單個值可以就地更改,但增長需要創建一個新陣列(除了有限的使用resize)。 numpy還有一種view機制可以創建一個新陣列,但它共享底層資料。這可能是有效的,但對于粗心的人來說存在缺陷。
pandas建立在 上numpy,索引和值存盤在陣列中。正如其他答案所示,它通常有一個in-place選項,但我懷疑這實際上并沒有減少作業或運行時間。我們必須更多地了解更改和資料幀結構。
最終,我們,SO 海報,無法權威地回答“為什么”的問題。我們只能根據知識和經驗發表意見。我們大多數人都不是開發人員,當然也不是原始開發人員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/344673.html
