理解 Python 中的 astype()
astype() 函數是 Python 中的一個強大方法,主要用於 pandas 函式庫,用於將 DataFrame 或 Series 中的列或資料集轉換為特定資料型別。它也可在 NumPy 中用於將陣列元素轉換為不同類型。
astype() 的基本用法
astype() 函數用於將 pandas 物件(如 Series 或 DataFrame)或 NumPy 陣列的資料類型轉換為另一種類型。
pandas 的語法:
DataFrame.astype(dtype, copy=True, errors='raise')
NumPy 語法:
ndarray.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
關鍵參數
1.資料型別
要將資料轉換為的目標資料型態。可以使用以下方式指定:
- 單一型別(例如 float、int、str)。
- 將列名對應到類型的字典(對於 pandas DataFrames)。
2.複製(pandas 和 NumPy)
- 預設:True
- 用途:是否傳回原始資料的副本(如果為True)或就地修改(如果為False)。
3.錯誤(僅限熊貓)
-
選項:
- 'raise'(預設):如果轉換失敗則引發錯誤。
- 'ignore':默默地忽略錯誤。
4.順序(僅限 NumPy)
- 控制輸出數組的記憶體佈局。選項:
- 'C':C-連續順序。
- 'F':Fortran 連續順序。
- 'A':如果輸入是 Fortran 連續的,則使用 Fortran 順序,否則使用 C 順序。
- 'K':符合輸入數組的佈局。
5.鑄造(僅限 NumPy)
- 控制投射行為:
- 'no':不允許轉換。
- 'equiv':僅允許位元組順序更改。
- 「安全」:只允許保留值的強制轉換。
- 'same_kind':僅允許安全強制轉換或某種類型內的強制轉換(例如,float -> int)。
- '不安全':允許任何資料轉換。
6. subok(僅限 NumPy)
- 如果為 True,則傳遞子類別;如果為 False,則傳回的陣列將是基底類別數組。
範例
1. pandas 的基本轉換
import pandas as pd # Example DataFrame df = pd.DataFrame({'A': ['1', '2', '3'], 'B': [1.5, 2.5, 3.5]}) # Convert column 'A' to integer df['A'] = df['A'].astype(int) print(df.dtypes)
輸出:
A int64 B float64 dtype: object
2.多列的字典映射
# Convert multiple columns df = df.astype({'A': float, 'B': int}) print(df.dtypes)
輸出:
DataFrame.astype(dtype, copy=True, errors='raise')
3.使用錯誤='忽略'
ndarray.astype(dtype, order='K', casting='unsafe', subok=True, copy=True)
輸出:
import pandas as pd # Example DataFrame df = pd.DataFrame({'A': ['1', '2', '3'], 'B': [1.5, 2.5, 3.5]}) # Convert column 'A' to integer df['A'] = df['A'].astype(int) print(df.dtypes)
- 「two」的轉換失敗,但不會引發錯誤。
4.在 NumPy 使用 astype()
A int64 B float64 dtype: object
輸出:
# Convert multiple columns df = df.astype({'A': float, 'B': int}) print(df.dtypes)
5.在 NumPy 中使用casting='safe'進行鑄造
A float64 B int64 dtype: object
輸出:
df = pd.DataFrame({'A': ['1', 'two', '3'], 'B': [1.5, 2.5, 3.5]}) # Attempt conversion with errors='ignore' df['A'] = df['A'].astype(int, errors='ignore') print(df)
6.處理 pandas 中的非數字類型
A B 0 1 1.5 1 two 2.5 2 3 3.5
輸出:
import numpy as np # Example array arr = np.array([1.1, 2.2, 3.3]) # Convert to integer arr_int = arr.astype(int) print(arr_int)
7.使用 astype() 進行記憶體最佳化
代碼:
[1 2 3]
輸出:
最佳化前(原始記憶體使用情況):
arr = np.array([1.1, 2.2, 3.3]) # Attempt an unsafe conversion try: arr_str = arr.astype(str, casting='safe') except TypeError as e: print(e)
最佳化後(最佳化記憶體使用):
Cannot cast array data from dtype('float64') to dtype('<u32 according to the rule> <hr> <h3> <strong>說明:</strong> </h3> <ul> <li> <p><strong>原始記憶體使用:</strong></p> <ul> <li>A 欄位作為 int64 使用 24 個位元組(每個元素 8 個位元組 × 3 個元素)。 </li> <li>B 欄位作為 float64 使用 24 個位元組(每個元素 8 個位元組 × 3 個元素)。 </li> </ul> </li> <li> <p><strong>最佳化記憶體使用:</strong></p> <ul> <li>A 欄位作為 int8 使用 3 個位元組(每個元素 1 個位元組 × 3 個元素)。 </li> <li>B 欄位作為 float32 使用 12 個位元組(每個元素 4 個位元組 × 3 個元素)。 </li> </ul> </li> </ul> <h2> 使用較小的資料類型可以顯著減少記憶體使用量,尤其是在處理大型資料集時。 </h2> <h3> <strong>常見陷阱</strong> </h3> <ol> <li> <strong>無效轉換</strong>:轉換不相容的類型(例如,當存在非數字值時,將字串轉換為數字類型)。 </li> </ol> <pre class="brush:php;toolbar:false">df = pd.DataFrame({'A': ['2022-01-01', '2023-01-01'], 'B': ['True', 'False']}) # Convert to datetime and boolean df['A'] = pd.to_datetime(df['A']) df['B'] = df['B'].astype(bool) print(df.dtypes)
-
Errors='ignore'靜默錯誤
:謹慎使用,因為它可能會靜默地無法轉換。 -
精度損失
:從高精度類型(例如 float64)轉換為低精度類型(例如 float32)。
進階範例
1.複雜資料型別轉換
A datetime64[ns] B bool dtype: object
輸出:
import pandas as pd # Original DataFrame df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.1, 2.2, 3.3]}) print("Original memory usage:") print(df.memory_usage()) # Downcast numerical types df['A'] = df['A'].astype('int8') df['B'] = df['B'].astype('float32') print("Optimized memory usage:") print(df.memory_usage())
2.在 NumPy 中使用 astype() 來處理結構化陣列
Index 128 A 24 B 24 dtype: int64
輸出:
DataFrame.astype(dtype, copy=True, errors='raise')
總結
astype() 函數是 pandas 和 NumPy 中資料型別轉換的多功能工具。它允許對轉換行為、記憶體最佳化和錯誤處理進行細粒度控制。正確使用其參數(例如 pandas 中的錯誤和 NumPy 中的轉換)可確保穩健且高效的資料類型轉換。
以上是Python 中的 astype() 函數是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本教程演示如何使用Python處理Zipf定律這一統計概念,並展示Python在處理該定律時讀取和排序大型文本文件的效率。 您可能想知道Zipf分佈這個術語是什麼意思。要理解這個術語,我們首先需要定義Zipf定律。別擔心,我會盡量簡化說明。 Zipf定律 Zipf定律簡單來說就是:在一個大型自然語言語料庫中,最頻繁出現的詞的出現頻率大約是第二頻繁詞的兩倍,是第三頻繁詞的三倍,是第四頻繁詞的四倍,以此類推。 讓我們來看一個例子。如果您查看美國英語的Brown語料庫,您會注意到最頻繁出現的詞是“th

Python 提供多種從互聯網下載文件的方法,可以使用 urllib 包或 requests 庫通過 HTTP 進行下載。本教程將介紹如何使用這些庫通過 Python 從 URL 下載文件。 requests 庫 requests 是 Python 中最流行的庫之一。它允許發送 HTTP/1.1 請求,無需手動將查詢字符串添加到 URL 或對 POST 數據進行表單編碼。 requests 庫可以執行許多功能,包括: 添加表單數據 添加多部分文件 訪問 Python 的響應數據 發出請求 首

處理嘈雜的圖像是一個常見的問題,尤其是手機或低分辨率攝像頭照片。 本教程使用OpenCV探索Python中的圖像過濾技術來解決此問題。 圖像過濾:功能強大的工具圖像過濾器

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

PDF 文件因其跨平台兼容性而廣受歡迎,內容和佈局在不同操作系統、閱讀設備和軟件上保持一致。然而,與 Python 處理純文本文件不同,PDF 文件是二進製文件,結構更複雜,包含字體、顏色和圖像等元素。 幸運的是,借助 Python 的外部模塊,處理 PDF 文件並非難事。本文將使用 PyPDF2 模塊演示如何打開 PDF 文件、打印頁面和提取文本。關於 PDF 文件的創建和編輯,請參考我的另一篇教程。 準備工作 核心在於使用外部模塊 PyPDF2。首先,使用 pip 安裝它: pip 是 P

本教程演示瞭如何利用Redis緩存以提高Python應用程序的性能,特別是在Django框架內。 我們將介紹REDIS安裝,Django配置和性能比較,以突出顯示BENE

自然語言處理(NLP)是人類語言的自動或半自動處理。 NLP與語言學密切相關,並與認知科學,心理學,生理學和數學的研究有聯繫。在計算機科學

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SublimeText3漢化版
中文版,非常好用

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver Mac版
視覺化網頁開發工具