无法在 python DataFrame/Array 中将 float 转换为 int
Can't convert float to int in python DataFrame/Array
我是 Kaggle 和 Python 的新手,不知道如何转换这个数据集。对于任何熟悉的人,我正在尝试为泰坦尼克号教程重现基于性别的解决方案。
我有:
submission = pd.DataFrame({'PassengerId' : test_data.PassengerId, 'Survived' : final_prediction})
print(submission.head())
这给了我:
PassengerId Survived
0 892 0.184130
1 893 0.761143
2 894 0.184130
3 895 0.184130
4 896 0.761143
我需要转换成:
PassengerId Survived
0 892 0
1 893 1
2 894 0
3 895 0
4 896 1
同样,我并不真正了解 Python,我已经尝试了一些解决方案,例如:
for x in np.nditer(final_prediction, op_flags=['readwrite']):
x[...]=(1 if x[...] >= 0.50 else 0)
这给了我这样的浮点数:(并且在 CSV 文件中仍然显示为 0.0、1.0)
PassengerId Survived
0 892 0.
1 893 1.
并且:
rounded_prediction = np.rint(final_prediction)
给我同样的结果(即 0., 1.)
以下:
int_prediction = final_prediction.astype(int)
给我全 0
有什么想法吗?谢谢!
所以首先,请记住您要使用尽可能多的矢量化操作,因为这会加快您的代码速度!总是很重要。因此,pandas 有一种惊人的方法来代替循环。
submission['Survived'] = submission['Survived'].astype(int)
请注意,这会截断值,因此在您的情况下您可能想说:
submission['Survived][:] += 0.5
在执行上述操作之前,这将确保当您转换为 int 时 0.5 的值为 1,低于该值的值将被截断为 0。
数据类型的改变(列的类型可以在 df.dtypes 中找到)因此是通过函数 pd.astype()
完成的
可能是从字面上说明它应该四舍五入的另一种方式 up/down 但是通过这种简单的数据操作它应该可以工作 ;)
您需要应用舍入,然后将结果转换为'int'以去掉小数点。
这应该有效:np.rint(final_prediction).astype(np.int)
我是 Kaggle 和 Python 的新手,不知道如何转换这个数据集。对于任何熟悉的人,我正在尝试为泰坦尼克号教程重现基于性别的解决方案。
我有:
submission = pd.DataFrame({'PassengerId' : test_data.PassengerId, 'Survived' : final_prediction})
print(submission.head())
这给了我:
PassengerId Survived
0 892 0.184130
1 893 0.761143
2 894 0.184130
3 895 0.184130
4 896 0.761143
我需要转换成:
PassengerId Survived
0 892 0
1 893 1
2 894 0
3 895 0
4 896 1
同样,我并不真正了解 Python,我已经尝试了一些解决方案,例如:
for x in np.nditer(final_prediction, op_flags=['readwrite']):
x[...]=(1 if x[...] >= 0.50 else 0)
这给了我这样的浮点数:(并且在 CSV 文件中仍然显示为 0.0、1.0)
PassengerId Survived
0 892 0.
1 893 1.
并且:
rounded_prediction = np.rint(final_prediction)
给我同样的结果(即 0., 1.)
以下:
int_prediction = final_prediction.astype(int)
给我全 0
有什么想法吗?谢谢!
所以首先,请记住您要使用尽可能多的矢量化操作,因为这会加快您的代码速度!总是很重要。因此,pandas 有一种惊人的方法来代替循环。
submission['Survived'] = submission['Survived'].astype(int)
请注意,这会截断值,因此在您的情况下您可能想说:
submission['Survived][:] += 0.5
在执行上述操作之前,这将确保当您转换为 int 时 0.5 的值为 1,低于该值的值将被截断为 0。
数据类型的改变(列的类型可以在 df.dtypes 中找到)因此是通过函数 pd.astype()
完成的可能是从字面上说明它应该四舍五入的另一种方式 up/down 但是通过这种简单的数据操作它应该可以工作 ;)
您需要应用舍入,然后将结果转换为'int'以去掉小数点。 这应该有效:np.rint(final_prediction).astype(np.int)