我有一个以下形式的 CSV 文件(忽略前两行的空格,这只是为了字母的良好对齐):
, ,E,E,F,F
, ,G,H,G,H
A,C,1,2,3,4
A,D,5,6,7,8
B,C,9,0,1,2
B,D,3,4,5,6
在Python中,通过使用pandas库创建数据框,如下所示:
df = pd.read_csv(path, header=[0,1], index_col=[0,1])
然后我可以通过提及标题行和索引列的值来获取值:
>>> df.loc[("A","D"), ("E","G")]
5
但是在 Julia 中,使用 CSV 和 DataFrame 包,我只能将行“分组”为标题,而不能将列“分组”。现在,我这样做:
df = CSV.read(path, DataFrame, header=[1,2], normalizenames=true)
我在该函数的文档中找不到启用此功能的任何选项(https://csv.juliadata.org/stable/reading.html)
有没有办法,也许使用其他函数或包,在 Julia 中做我在 Python 中能做的事情?
using CSV, DataFrames, NamedArrays
df = CSV.read(path, DataFrame; header=false)
M = NamedArray(
parse.(Int,Array(df[3:end,3:end])),
(
map(splat(*),eachrow(df[3:end,1:2])),
map(splat(*),eachcol(df[1:2,3:end]))
)
)
输出:
4×4 Named Matrix{Int64}
A ╲ B │ EG EH FG FH
──────┼───────────────
AC │ 1 2 3 4
AD │ 5 6 7 8
BC │ 9 0 1 2
BD │ 3 4 5 6