CSV.jl
,可以从 .csv
文件读取 DataFrame:
using CSV
df = CSV.read("data.csv", delim=",")
但是,如何将 CSV 文件读入
Vector{Float64}
数据类型?
您可以使用 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
函数。
这是使用 CSV.jl 读回
Matrix
的方法:
julia> df = DataFrame(rand(2,3))
2×3 DataFrame
│ Row │ x1 │ x2 │ x3 │
│ │ Float64 │ Float64 │ Float64 │
├─────┼───────────┼──────────┼──────────┤
│ 1 │ 0.0444818 │ 0.570981 │ 0.608709 │
│ 2 │ 0.47577 │ 0.675344 │ 0.500577 │
julia> CSV.write("test.csv", df)
"test.csv"
julia> CSV.File("test.csv") |> Tables.matrix
2×3 Array{Float64,2}:
0.0444818 0.570981 0.608709
0.47577 0.675344 0.500577
您可以将您的
DataFrame
转换为某种类型的 Matrix
。如果没有丢失数据,这应该可以工作。如果缺少数据,只需省略 convert
中的类型即可。
arr = convert(Matrix{Float64}, df)
如果这确实是您想要的,您可以对结果调用
vec
来获取向量。
根据文件的不同,我会按照之前答案中的建议使用
readdlm
。
总结博古米尔的答案,您可以使用:
using DelimitedFiles
data = readdlm("data.csv", ',', Float64)