微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试从 Julia 中的 Arrow Dataframe 获取一行时出现 MethodError

如何解决尝试从 Julia 中的 Arrow Dataframe 获取一行时出现 MethodError

我有一个如下所示的数据集:

enter image description here

我正在获取一个 CSV 文件,将其转换为 Parquet,然后将其发送到 Arrow。我这样做是有原因的。我的目标是访问行 "Algeria" 中的信息。这是我的代码

df = CSV.read("temp.csv",DataFrame)
write_parquet("data_file.parquet",df)
df = DataFrame(read_parquet("data_file.parquet"))
Arrow.write("data_file.arrow",df)
df = DataFrame(Arrow.Table("data_file.arrow"))

dates = names(df)[5:end]
countries = unique(df[:,:"Country/Region"])

algeria = df[df."Country/Region" .== "Algeria",4:end]
# Print(sum(eachcol(algeria)))
Print(Statistics.mean(eachcol(algeria)))

但是最后一部分试图从 Arrow 检索数据,却抛出了这个错误

MethodError: no method matching +(::Float64,::String)

Closest candidates are:

+(::Any,::Any,!Matched::Any,!Matched::Any...) at operators.jl:538

+(::Float64,!Matched::Float64) at float.jl:401

+(!Matched::ChainRulescore.One,::Any) at /home/onur/.julia/packages/ChainRulescore/7d1hl/src/differential_arithmetic.jl:94

我做错了什么?

这是我在 REPL 中输入“Algeria”时得到的

enter image description here

更新:实施加布里埃尔的建议:

begin
    algeria = df[df."Country/Region" .== "Algeria",4:end]
    
    for i = 1:size(algeria,2)
        if eltype(algeria[!,i]) == String
            algeria[!,i] = parse.(Float64,algeria[!,i])
        end
    end
    
    Statistics.mean(eachcol(algeria))
end

这是错误

MethodError: no method matching +(::Float64,::Any) at /home/onur/.julia/packages/ChainRulescore/7d1hl/src/differential_arithmetic.jl:94

解决方法

您需要对 mean 进行矢量化,请参阅以下代码:

julia> df = DataFrame(a=1:3,b=1.5:1:3.5)
3×2 DataFrame
 Row │ a      b
     │ Int64  Float64
─────┼────────────────
   1 │     1      1.5
   2 │     2      2.5
   3 │     3      3.5

julia> Statistics.mean.(eachcol(df))
2-element Vector{Float64}:
 2.0
 2.5
,

所以看起来 algeria 中的一列包含字符串而不是浮点数。

在计算平均值之前尝试这样做:

for i = 1:size(algeria,2)
    if eltype(algeria[!,i]) == String
        algeria[!,i] = parse.(Float64,algeria[!,i])
    end
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?