朱莉娅InexactError:Int64

时间:2020-06-02 16:43:35

标签: dataframe error-handling julia

我是Julia的新人。得到了这个InexactError。提到我已经尝试过将其转换为float了,但是它没有用,也许我做错了。

column = df[:, i]  
max = maximum(column)
min = minimum(column)
scaled_column = (column .- min)/max   # This is the error, I think
df[:, i] = scaled_column
julia> VERSION
v"1.4.2"

2 个答案:

答案 0 :(得分:4)

很难给出肯定的答案,而没有给出问题的最小示例,但是通常,当您尝试将值转换为精确类型(例如整数类型,但不同于浮点类型)时,会发生InexactError原始值无法准确表示。例如:

julia> convert(Int, 1.0)
1

julia> convert(Int, 1.5)
ERROR: InexactError: Int64(1.5)

其他编程语言在这里任意选择某种舍入方式(通常是截断但有时舍入到最接近)。茱莉亚(Julia)不会猜测,要求您保持露骨。如果要舍入,截断,设置天花板等,可以执行以下操作:

julia> floor(Int, 1.5)
1

julia> round(Int, 1.5)
2

julia> ceil(Int, 1.5)
2

回到您的问题:您没有在任何地方致电convert,为什么会遇到转换错误?在多种情况下,Julia会为您自动调用convert,通常是在您尝试将值分配给键入位置时。例如,如果您有一个Int数组,并为其分配了浮点值,则该值将自动转换:

julia> v = [1, 2, 3]
3-element Array{Int64,1}:
 1
 2
 3

julia> v[2] = 4.0
4.0

julia> v
3-element Array{Int64,1}:
 1
 4
 3

julia> v[2] = 4.5
ERROR: InexactError: Int64(4.5)

这很可能发生在您身上:您通过执行(column .- min)/max获得非整数值,然后尝试将其分配到整数位置,并得到错误。

答案 1 :(得分:1)

作为旁注,您可以使用transform!来实现所需的目标:

transform!(df, i => (x -> (x .- minimum(x)) ./ maximum(x)) => i)

,此操作将替换该列。

相关问题