Dataframe Julia不精确错误:Int64

Dataframe Julia不精确错误:Int64,dataframe,error-handling,julia,Dataframe,Error Handling,Julia,我是朱莉娅的新手。我犯了这个不准确的错误。要说的是,我曾试图在之前转换为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 如果没有一个简单的问题示例,很难给出一个确定的答案,但一般来说,当您尝

我是朱莉娅的新手。我犯了这个不准确的错误。要说的是,我曾试图在之前转换为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> convert(Int, 1.0)
1

julia> convert(Int, 1.5)
ERROR: InexactError: Int64(1.5)
其他编程语言在这里任意选择某种舍入方式(通常是截断,但有时舍入到最近值)。朱莉娅不会猜测,要求你直言不讳。如果您想要圆化、截断、采用天花板等,您可以:

julia> floor(Int, 1.5)
1

julia> round(Int, 1.5)
2

julia> ceil(Int, 1.5)
2
回到您的问题:您没有在任何地方调用
convert
,为什么会出现转换错误?在各种情况下,Julia会自动为您调用convert,通常是在您尝试为键入的位置分配值时。例如,如果您有一个
Int
s数组,并向其中分配了一个浮点值,则该数组将自动转换为:

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
获得非整数值,然后尝试将其分配到整数位置,您会得到错误。

作为旁注,您可以使用
转换要实现您的目标,请执行以下操作:

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

此操作将替换列。

什么是
i
?一个更完整的MWE在这里会很有帮助。你能试着用一个完整的例子重现错误,并粘贴完整的错误信息吗?另外,我不建议使用max和min作为变量名,因为有具有这些名称的julia函数。最后,我认为您还应该在除法运算符之前添加一个点;MWE可以是使用数据帧的
julia>;df=数据帧(a=兰德(1:10,10));缩放列=(df.a.-最小值(df.a))/最大值(df.a);df[:,:a]=scaled_column
我不熟悉最近的数据帧,我本以为
df[:,I]=values
会替换
I
th列,而不是在适当的位置分配给它,但如果分配给现有列,那么是的,就可以了。是的,在这种情况下
df[!,I]
会替换列,而
df[:,i]
则将值替换到位。为便于将来参考,将记录当前的索引行为。
df[:,i]
工作正常。在基本写入中,
matrix[:,i]=v
matrix[:]=v
也不会重新分配整个矩阵并将绑定更新到
matrix
<代码>:
在这种情况下只是一个行选择器,就像轴(df,1)一样(因此
df[轴(df,1),i]=值
是等效的)。
选择器的引入正是因为它没有在Base中使用,所以它可以遵循不同的规则。还可以想象
df
将是一个视图-很明显,
df[:,i]=v
不应该被允许替换列,而是应该在适当的位置工作。最后-如果
df
是例如
Dict
NamedTuple
,那么您将编写
df[i][:]=v
作为等效语法,并且我假设在这种情况下,操作是正常的。
transform!(df, i => (x -> (x .- minimum(x)) ./ maximum(x)) => i)