[英]How do I keep original pandas dataframe values while using df.astype() ? I need to raise a value error for below example
[英]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
如果可能, infer_objects
(僅限 0.21+)將您的數據轉換為 numpy 類型。
df.infer_objects().dtypes
worker object
day int64
tasks object
dtype: object
如果可能, convert_dtypes
會將您的數據轉換為最具體的 pandas 擴展數據類型。
df.convert_dtypes().dtypes
worker string
day Int64
tasks string
dtype: object
有關“硬”與“軟”轉換的更多信息,另請參閱我的這個答案。
在我看來,最安全的方法是在您的apply
程序 function 中使用pd.to_numeric
,它還允許您進行錯誤操作、 coerce
、 raise
或ignore
。 將列轉換為數字后,您可以安全地執行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.