У меня есть набор данных, который выглядит следующим образом:
Я беру 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.
Обновление: реализация предложения Габриэля:
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, ::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
begin
end
, характерные для Плутона, и сделайте ненужным чтение вашего кода другими людьми. - person Przemyslaw Szufel   schedule 18.03.2021algeria
в REPL? - person Gabriel Hassler   schedule 18.03.2021algeria
, который обычно выводится в REPL (хотя, по-видимому, не в вашем конкретном редакторе). Чтобыmean
работал, все элементы вalgeria
должны быть типаFloat64
. Попробуйте это:all(eltype.(df[!, i] for i = 1:size(df, 2)) .== Float64)
, чтобы увидеть, возвращает ли онtrue
. Если нет, выясните, какие столбцы имеют неправильный тип с помощьюfindall(eltype.(df[!, i] for i = 1:size(df, 2)) .!= Float64)
, и используйте какую-нибудь версиюparse(x, Float64)
, чтобы преобразовать их в правильный тип. - person Gabriel Hassler   schedule 18.03.2021