在Julia中,使用CSV.jl,可以从.csv文件中读取DataFrame:
CSV.jl
.csv
using CSV df = CSV.read("data.csv", delim=",")
字符串但是,如何将CSV文件读入Vector{Float64}数据类型?
Vector{Float64}
ux6nzvsh1#
您可以从stdlib使用DelimitedFiles模块:
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函数。
IOBuffer
readdlm
Matrix{Float64}
vec
下面是如何使用CSV.jl读回Matrix:
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
型
z31licg02#
您可以将DataFrame转换为特定类型的Matrix。如果没有丢失数据,这应该可以工作。如果有丢失数据,只需忽略convert中的类型。arr = convert(Matrix{Float64}, df)你可以在结果上调用vec来得到一个向量,如果这是你真正想要的。根据文件的不同,我会选择readdlm,就像前面的回答中建议的那样。
DataFrame
convert
arr = convert(Matrix{Float64}, df)
olqngx593#
为了总结Bogumil的答案,你可以用途:
using DelimitedFiles data = readdlm("data.csv", ',', Float64)
字符串
bjp0bcyl4#
您可以通过以下命令让CSV.read使用Matrix作为其目的地:
CSV.read
julia> import CSV julia> s = """ 1,2,3 4,5,6 7,8,9"""; julia> CSV.read(IOBuffer(s), CSV.Tables.matrix; header=false) 3×3 Matrix{Int64}: 1 2 3 4 5 6 7 8 9
字符串请注意,有一个currently-outstanding issue可以直接使用内置的Matrix类型本身作为“接收器”,这将使其更容易理解。
4条答案
按热度按时间ux6nzvsh1#
您可以从stdlib使用
DelimitedFiles
模块:字符串
我向你展示的例子阅读从
IOBuffer
是完全可复制的,但你也可以从文件中读取数据。在readdlm
的文档字符串中,你可以找到更多关于可用选项的细节。注意,你将得到
Matrix{Float64}
而不是Vector{Float64}
,但我知道这是你想要的。如果不是,那么为了将矩阵转换为向量,你可以在阅读数据后调用vec
函数。编辑
下面是如何使用CSV.jl读回
Matrix
:型
z31licg02#
您可以将
DataFrame
转换为特定类型的Matrix
。如果没有丢失数据,这应该可以工作。如果有丢失数据,只需忽略convert
中的类型。arr = convert(Matrix{Float64}, df)
你可以在结果上调用
vec
来得到一个向量,如果这是你真正想要的。根据文件的不同,我会选择
readdlm
,就像前面的回答中建议的那样。olqngx593#
为了总结Bogumil的答案,你可以用途:
字符串
bjp0bcyl4#
您可以通过以下命令让
CSV.read
使用Matrix
作为其目的地:字符串
请注意,有一个currently-outstanding issue可以直接使用内置的
Matrix
类型本身作为“接收器”,这将使其更容易理解。