将CSV读入数组

时间:2019-01-28 20:44:59

标签: csv julia

在Julia中,使用CSV.jl可以读取一个.csv文件的DataFrame:

using CSV

df = CSV.read("data.csv", delim=",")

但是,我如何才能将CSV文件读取为Vector{Float64}数据类型?

3 个答案:

答案 0 :(得分:4)

您可以使用stdlib中的DelimitedFiles模块:

julia> using DelimitedFiles

julia> s = """
       1,2,3
       4,5,6
       7,8,9"""
"1,2,3\n4,5,6\n7,8,9"

julia> b = IOBuffer(s)
IOBuffer(data=UInt8[...], readable=true, writable=false, seekable=true, append=false, size=17, maxsize=Inf, ptr=1, mark=-1)

julia> readdlm(b, ',', Float64)
3×3 Array{Float64,2}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

我正在向您展示从IOBuffer读取的示例,它具有完全可重复性,但是您也可以从文件读取数据。在readdlm的文档字符串中,您可以找到有关可用选项的更多详细信息。

请注意,您将获得Matrix{Float64}而不是Vector{Float64},但我知道这就是您想要的。如果不是这样,则为了将矩阵转换为向量,可以在读取数据后在其上调用vec函数。

答案 1 :(得分:4)

您可以将DataFrame转换为特定类型的Matrix。如果没有丢失的数据,这应该起作用。如果缺少数据,只需在convert中省略类型。

arr = convert(Matrix{Float64}, df)

如果确实是您想要的,您可以在结果上调用vec以获取向量。

根据文件的不同,我将按照上一个答案中的建议使用readdlm

答案 2 :(得分:0)

要总结 Bogumil 的回答,您可以使用:

using DelimitedFiles
data = readdlm("data.csv", ',', Float64)