无法在 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)