首頁 >後端開發 >Python教學 >為什麼我的 Pandas DataFrame 具有帶有'object”dtype 的字串列?

為什麼我的 Pandas DataFrame 具有帶有'object”dtype 的字串列?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-27 04:03:03290瀏覽

Why Does My Pandas DataFrame Have String Columns with

理解「DataFrame 中的字串,但dtype 是物件」問題

在用於資料分析的流行Python 庫Pandas 中,您可能會遇到以下情況:您的DataFrame 包含看似字串值的列,但dtype 屬性將它們指示為「物件」。將物件明確轉換為字串後,可能會出現此異常。

物件資料類型的原因:

混亂源自於 NumPy 陣列的底層實現,它將資料儲存在資料框中。 NumPy 陣列需要相同大小的元素(以位元組為單位)。對於整數 (int64) 和浮點數 (float64) 等基本類型,大小是固定的(8 位元組)。然而,字串的長度是可變的。

為了適應這種可變性,Pandas 不會將字串位元組直接儲存在陣列中。相反,它會建立一個包含指向字串物件的指標的「物件」陣列。這導致 dtype 為“object”。

範例:

考慮以下DataFrame:

<code class="python">df = pd.DataFrame({
    "id": [0, 1, 2],
    "attr1": ["foo", "bar", "baz"],
    "attr2": ["100", "200", "300"],
})</code>

如果我們檢查在列中,我們看到attr2 的資料類型為「object 」:

<code class="python">print(df.dtypes)

# Output:
# id       int64
# attr1    object
# attr2    object</code>

轉換為字串:

當我們明確將attr2 轉換為字串時,Pandas 會執行以下操作:不改變底層存儲機制:

<code class="python">df["attr2"] = df["attr2"].astype(str)</code>

因此,attr2 保留資料類型「object」。

附加資訊:

  • 與常見的誤解相反,Pandas 中沒有專用的「字串」資料類型。
  • 雖然物件陣列可以保存任何類型的對象,但由於額外的開銷,出於效能原因,它並不理想。
  • 為了確保對字串資料的高效操作,建議避免建立物件陣列並轉換為分類或固定長度字串資料類型。

以上是為什麼我的 Pandas DataFrame 具有帶有'object”dtype 的字串列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn