首页 > 解决方案 > 如何用 julia 创建输出 csv?

问题描述

我是 Julia 的新用户。我尝试为启动创建一个代码。

begin
    using Pkg
    Pkg.add("CSV") 
    Pkg.add("DataFrames")  
    using Statistics
    using DataFrames
    using CSV
    using Dates
    v=[1:12]
    resultat=CSV.File("ResultatPropre.csv";header=true; delim=";")
    println(resultat)
    i=1
    while i <= 12
        a=now()     ##Dates.millisecond
        dt = CSV.read(resultat[i,1]*"_"*resultat[i,2]*"_"*resultat[i,3]*"_"*resultat[i,4]*"_1.csv")
        x=resultat[i,6]
        moy="MOYENNE"
        if x==moy
            for c in eachcol(dt)
                println(mean(dt[:c]))
            end 
        else
            for c in eachcol(dt)
                println(median(dt[:c]))
            end
        end 
        v[i]=now()-a
        close(dt)
        i = i + 1 
    end
    CSV.write("OUT1.csv",  DataFrame(hcat(resultat,v)), writeheader=false)
    close(resultat)
end

我不知道这段代码是否正确,但我没有错误消息。文档 OUT1.CSV 为空。为什么?

对不起,如果你不明白我的英语不流利。谢谢你。

标签: julia

解决方案


与您之前的问题一样,这很难调试,因为它依赖于存储在本地计算机上的文件 - 如果您可以创建最小的工作示例来重现您遇到的错误,那么其他人最容易帮助您。

从您发布的内容来看,尽管您尝试执行的操作存在一个明显的问题:

resultat=CSV.File("ResultatPropre.csv";header=true; delim=";")

这将返回一个CSV.File对象,而不是您可能期望的 DataFrame。考虑以下示例:

julia> using DataFrames, CSV

julia> CSV.write("out.csv", DataFrame(rand(5, 2))) # example data
"out.csv"

julia> resultat = CSV.File("out.csv")
5-element CSV.File{false}:
 CSV.Row{false}: (x1 = 0.8579220366916582, x2 = 0.6209363986752581)
 CSV.Row{false}: (x1 = 0.25341118271903995, x2 = 0.13828085618933872)
 CSV.Row{false}: (x1 = 0.67532944746357, x2 = 0.7830459406731047)
 CSV.Row{false}: (x1 = 0.268297279369758, x2 = 0.9701649420771219)
 CSV.Row{false}: (x1 = 0.8369770803698637, x2 = 0.77439272213442)

hcat resultat考虑到您和您的v向量稍后,这可能不是您所期望的。

但是,实际上会在您的代码中出错的行是:

close(dt)

此时,dt是 a DataFrame,因为您通过调用CSV.readcsv 文件创建了它,并且您正在调用close此 DataFrame 上的函数。但是,closeDataFrames 不存在方法:

julia> close(DataFrame(rand(5,2)))
ERROR: MethodError: no method matching close(::DataFrame)

的结果CSV.readDataFrame存储在内存中的,并且在对 DataFrame 执行操作后需要关闭的任何地方都没有“打开”文件句柄 -CSV.read与调用open然后迭代的某些文本文件不同。


推荐阅读