python中的类型转换从float到int

joh*_*ohn 9 python pandas

我试图改变data_df它的类型float64int.

data_df['grade'] = data_df['grade'].astype(int)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

int()的基数为10的无效文字:'17 .44'

jez*_*ael 11

我认为你to_numeric首先需要因为float不能被投射到int:

data_df['grade'] = pd.to_numeric(data_df['grade']).astype(int)
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是首先投射到float然后int:

data_df['grade'] = data_df['grade'].astype(float).astype(int)
Run Code Online (Sandbox Code Playgroud)

样品:

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
Run Code Online (Sandbox Code Playgroud)
data_df['grade'] = data_df['grade'].astype(float).astype(int)
print (data_df)
   grade
0     10
1     20
2     17
Run Code Online (Sandbox Code Playgroud)

---

如果某些值无法转换,则在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
Run Code Online (Sandbox Code Playgroud)

如果想要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
Run Code Online (Sandbox Code Playgroud)

小建议:

在使用之前errors='coerce'检查所有行不可能通过boolean indexing以下方式转换为数字:

print (data_df[pd.to_numeric(data_df['grade'], errors='coerce').isnull()])
  grade
3    aa
Run Code Online (Sandbox Code Playgroud)