[英]Procedure for explicit type conversion in python from a float to 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
因为无法将float
为int
:
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.