簡體   English   中英

如何在應用 function 中使用 df.astype()

[英]How do I use df.astype() inside apply function

我有一個數據框,其中列中的所有數據都是 object 類型。 現在我想使用 astype() function 將所有對象轉換為數字類型,但我不想做這樣的事情->

df.astype({'col1': 'int32', 'col2': 'int32'....})

如果我做這樣的事情->

在此處輸入圖像描述

我收到一個錯誤,因為 apply function 需要 Series 遍歷。

PS:做同樣事情的另一個選擇是->

df.apply(pd.to_numeric)

但是我想使用.astype() 來做這個有沒有其他方法可以代替使用 df.apply() 並且仍然使用 df.astype() 將所有 object 類型數據轉換為數字

使用df = df.astype(int)將所有列轉換為 int 數據類型

import numpy

df.astype(numpy.int32)

如果這些是object列,並且您確定它們可以“軟轉換”為 int,那么您有兩個選擇:

df
  worker day    tasks
0      A   2     read
1      A   9    write
2      B   1     read
3      B   2    write
4      B   4  execute

df.dtypes

worker    object
day       object
tasks     object
dtype: object

pandas <= 0.25

如果可能, infer_objects (僅限 0.21+)將您的數據轉換為 numpy 類型。

df.infer_objects().dtypes

worker    object
day        int64
tasks     object
dtype: object

pandas >= 1.0

如果可能, convert_dtypes會將您的數據轉換為最具體的 pandas 擴展數據類型。

df.convert_dtypes().dtypes

worker    string
day        Int64
tasks     string
dtype: object

有關“硬”與“軟”轉換的更多信息,另請參閱我的這個答案

在我看來,最安全的方法是在您的apply程序 function 中使用pd.to_numeric ,它還允許您進行錯誤操作、 coerceraiseignore 將列轉換為數字后,您可以安全地執行astype()操作,但我不建議以以下方式開始:

df.apply(pd.to_numeric, errors='ignore')

如果該列不能轉換為數字,它將保持不變

df.apply(pd.to_numeric, errors='coerce')

列將轉換為數字,列中無法轉換為數字的值將替換為NaN

df.apply(pd.to_numeric, errors='raise')

如果無法將列轉換為數字,將返回ValueError

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM