将Julia中的dataframe值更改为NaN

将Julia中的dataframe值更改为NaN,dataframe,julia,nan,Dataframe,Julia,Nan,我有一个使用“.”而不是NaN的数据集,我目前正在尝试将这些字符串转换为NaN。我尝试了以下方法: for i in 1:length(final_df[:,1]) for j in 1:length(final_df[1,:]) if final_df[i,j] == ".." final_df[i,j] = NaN end end end 但是,我一直遇到以下错误:MethodError:无法将

我有一个使用“.”而不是NaN的数据集,我目前正在尝试将这些字符串转换为NaN。我尝试了以下方法:

for i in 1:length(final_df[:,1])
    for j in 1:length(final_df[1,:])
        if final_df[i,j] == ".."
            final_df[i,j] = NaN
        end 
    end 
end
但是,我一直遇到以下错误:MethodError:无法将Float64类型的对象“转换”为String类型的对象


感谢您的帮助,谢谢

NaN是用于未定义浮点运算的保留字,例如用于1/0,不得用于其他目的。改用
缺失

在您的示例中,要分配给
NaN
的数据帧列具有字符串类型,但
NaN
是浮点64。您应该将解析后的数据放入一个新的数据框中,将数组的元素类型转换为Float64(或任意,在本例中,在下面的解决方案中删除
float.

关于失踪:

df2 = DataFrame([float.(replace(c, (".." => missing))) for c in eachcol(df)])

另一种方法是使用如下广播:

julia> using DataFrames

julia> df = DataFrame(rand(["..", 5.5, -3.9], 5, 5), :auto)
5×5 DataFrame
 Row │ x1    x2    x3    x4    x5  
     │ Any   Any   Any   Any   Any 
─────┼─────────────────────────────
   1 │ 5.5   5.5   -3.9  -3.9  ..
   2 │ -3.9  -3.9  ..    ..    5.5
   3 │ ..    -3.9  ..    5.5   5.5
   4 │ ..    ..    ..    5.5   5.5
   5 │ 5.5   -3.9  -3.9  ..    5.5

julia> ifelse.(df .== "..", missing, df)
5×5 DataFrame
 Row │ x1         x2         x3         x4         x5        
     │ Float64?   Float64?   Float64?   Float64?   Float64?  
─────┼───────────────────────────────────────────────────────
   1 │       5.5        5.5       -3.9       -3.9  missing   
   2 │      -3.9       -3.9  missing    missing          5.5
   3 │ missing         -3.9  missing          5.5        5.5
   4 │ missing    missing    missing          5.5        5.5
   5 │       5.5       -3.9       -3.9  missing          5.5
(注意构造函数中自动生成列名的
:auto
参数)

这里我举一个
缺失的例子,因为正如lungben指出的那样,
NaN
在Julia中没有被用来表示缺失(但你也可以在这段代码中同样很好地使用它)


使用广播的好处是,您不必考虑类型升级-它将自动发生,因此您不应出错。

您实际上是在询问如何处理缺少特定符号的文件

假设这是您的文件:

dataset="c1#c2
a#12.5
b#..
c#3.3"
你可以这样读:

julia> d = CSV.File(IOBuffer(dataset), delim="#", missingstring="..") |> DataFrame
3×2 DataFrame
 Row │ c1      c2
     │ String  Float64?
─────┼───────────────────
   1 │ a            12.5
   2 │ b       missing
   3 │ c             3.3
请注意,
c2
列的类型为:

julia> eltype(d.c2)
Union{Missing, Float64}

您能发布
eltypes(df)
的结果吗
df
是您的数据帧?这是为了让我们知道数据帧中列的类型。此外,根据您发布的图像,它会显示“.”仅出现在数据帧的第四列中,那么为什么您要在发布的代码中迭代整个数据帧呢?你就不能重复第四列吗?
julia> eltype(d.c2)
Union{Missing, Float64}