簡體   English   中英

在python中將類型從float轉換為int

[英]type conversion in python from float to int

我正在嘗試將類型float64 data_df更改為int

data_df['grade'] = data_df['grade'].astype(int)

我收到以下錯誤。

以10為底的int()無效文字:“ 17.44”

我認為您首先需要to_numeric因為無法將floatint

data_df['grade'] = pd.to_numeric(data_df['grade']).astype(int)

另一個解決方案是先轉換為float然后轉換為int

data_df['grade'] = data_df['grade'].astype(float).astype(int)

樣品:

data_df = pd.DataFrame({'grade':['10','20','17.44']})
print (data_df)
   grade
0     10
1     20
2  17.44

data_df['grade'] = pd.to_numeric(data_df['grade']).astype(int)
print (data_df)
   grade
0     10
1     20
2     17

data_df['grade'] = data_df['grade'].astype(float).astype(int)
print (data_df)
   grade
0     10
1     20
2     17

---

如果某些值無法轉換,並且在to_numeric之后得到錯誤:

ValueError:無法解析字符串

可以添加參數errors='coerce'來將非數字轉換為NaN

如果NaN值則不能轉換為int請參閱docs

data_df = pd.DataFrame({'grade':['10','20','17.44', 'aa']})
print (data_df)
   grade
0     10
1     20
2  17.44
3     aa

data_df['grade'] = pd.to_numeric(data_df['grade'], errors='coerce')
print (data_df)
   grade
0  10.00
1  20.00
2  17.44
3    NaN

如果要將NaN更改為某個數字,例如0使用fillna

data_df['grade'] = pd.to_numeric(data_df['grade'], errors='coerce')
                     .fillna(0)
                     .astype(int)
print (data_df)
   grade
0     10
1     20
2     17
3      0

小建議:

在使用errors='coerce'請檢查所有無法通過boolean indexing轉換為數字的行:

print (data_df[pd.to_numeric(data_df['grade'], errors='coerce').isnull()])
  grade
3    aa

有效的方法是data_df['grade'] = int(pd.to_numeric(data_df['grade']))方法as_type(int)拋出並出錯,因為它想告訴您,從浮點數到整數的精確轉換是不可能的您將丟失信息。 我的解決方案將截斷整數(即1.9將變為1),因此您可能想在問題中指定是否要通過截斷或舍入將float轉換為整數(即​​1.9將變為2)

從:

data_df['grade'] = data_df['grade'].astype(int)

需要將int更改為'int'

data_df['grade'] = data_df['grade'].astype('int')

我發現這對我有用,其他先前的答案都對我沒有幫助:

data_df['grade'] = data_df['grade'].apply(np.int)

暫無
暫無

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

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