使用标题为 header 的 DelimitedFiles
using DelimitedFiles with title of the header
导入.csv文件时,有没有办法从header的标题中读取数据?
考虑以下 .csv 文件:
我的意思是,除了 start_node = round.(Int64, data[:,1])
之外,还有另一种说法是“start_node”是 .csv 文件中的 header 是 "start node i"
# Importing packages
using DelimitedFiles
# Data Preparation
network_data_file = "network.csv"
network_data = readdlm(network_data_file, ',', header=true)
data = network_data[1]
header = network_data[2]
start_node = round.(Int64, data[:,1])
end_node = round.(Int64, data[:,2])
最自然的方法是将 CSV
与 DataFrames
包一起使用。
考虑文件:
open("f.txt", "w") do f
println(f,"""start;end;c
1;2;3
4;5;6
""")
end
你可以这样做:
julia> df = CSV.File("f.txt") |> DataFrame
2×3 DataFrame
Row │ start end c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 2 3
2 │ 4 5 6
现在:
julia> df.start
2-element Vector{Int64}:
1
4
如果你想坚持使用 DelimitedFiles
,你可以这样做:
julia> res = readdlm("f.txt",';'; header=true);
julia> DataFrame(res[1], vec(res[2]))
2×3 DataFrame
Row │ start end c
│ Float64 Float64 Float64
─────┼───────────────────────────
1 │ 1.0 2.0 3.0
2 │ 4.0 5.0 6.0
完全没有任何包裹:
julia> res[1][:,findfirst(==("start"), vec(res[2]))]
2-element Vector{Float64}:
1.0
4.0
最后,值得注意的是,如果您希望 readdlm
产生 Int
s 而不是 Float64
s,您可以将数据读取为 readdlm("f.txt",';',Int,'\n'; header=true)
导入.csv文件时,有没有办法从header的标题中读取数据? 考虑以下 .csv 文件:
我的意思是,除了 start_node = round.(Int64, data[:,1])
之外,还有另一种说法是“start_node”是 .csv 文件中的 header 是 "start node i"
# Importing packages
using DelimitedFiles
# Data Preparation
network_data_file = "network.csv"
network_data = readdlm(network_data_file, ',', header=true)
data = network_data[1]
header = network_data[2]
start_node = round.(Int64, data[:,1])
end_node = round.(Int64, data[:,2])
最自然的方法是将 CSV
与 DataFrames
包一起使用。
考虑文件:
open("f.txt", "w") do f
println(f,"""start;end;c
1;2;3
4;5;6
""")
end
你可以这样做:
julia> df = CSV.File("f.txt") |> DataFrame
2×3 DataFrame
Row │ start end c
│ Int64 Int64 Int64
─────┼─────────────────────
1 │ 1 2 3
2 │ 4 5 6
现在:
julia> df.start
2-element Vector{Int64}:
1
4
如果你想坚持使用 DelimitedFiles
,你可以这样做:
julia> res = readdlm("f.txt",';'; header=true);
julia> DataFrame(res[1], vec(res[2]))
2×3 DataFrame
Row │ start end c
│ Float64 Float64 Float64
─────┼───────────────────────────
1 │ 1.0 2.0 3.0
2 │ 4.0 5.0 6.0
完全没有任何包裹:
julia> res[1][:,findfirst(==("start"), vec(res[2]))]
2-element Vector{Float64}:
1.0
4.0
最后,值得注意的是,如果您希望 readdlm
产生 Int
s 而不是 Float64
s,您可以将数据读取为 readdlm("f.txt",';',Int,'\n'; header=true)