我试图改变data_df它的类型float64来int.
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)
| 归档时间: |
|
| 查看次数: |
13469 次 |
| 最近记录: |