在Julia中将数组导出为CSV文件

23

如何使用Julia将(2d)数组A导出为CSV文件?

在旧版本中,我会编写以下代码:

writecsv( "FileName.csv",  A);

这将把数组 A 导入到指定的文件中。然而,在版本 >= 1.0 中无法正常工作。经过一些谷歌搜索,我也尝试使用 CSV 模块来处理:

f = open("test.csv", "a+");
CSV.write(f, A; delim = ',')

但这会抛出一个错误

ERROR: ArgumentError: no default `Tables.rows` implementation for type: Array{Int64,2}

(我的数组 A 的类型为 Int64)。

有人有这个最简单问题的可行解决方案吗?

1个回答

37

你需要加载DelimitedFiles模块,目前只支持writedlm函数。

因此,要将数组写入CSV文件,请使用以下方法:

julia> using DelimitedFiles

julia> writedlm( "FileName.csv",  A, ',')

要使用CSV.jl包获得相同的结果,请使用以下代码:

julia> using CSV, Tables

julia> CSV.write("FileName.csv",  Tables.table(A), writeheader=false)

由于Matrix不支持Tables.jl接口,因此您需要使用Tables.table将其封装。


不确定是否总是需要,但请注意您可能需要添加:auto参数,例如DataFrame(A, :auto)。Bogumił,这是新的惯例吗?谢谢。引用:“从矩阵构造DataFrame需要将:auto作为第二个参数传递以自动生成列名:DataFrame(matrix, :auto)”。 - PatrickT
1
是的,现在需要使用:auto。我更新了答案,推荐使用Tables.table,它不会复制数据。 - Bogumił Kamiński
当我尝试使用此修复方法时,我收到错误消息MethodError: no method matching table(::Array{Int64, 3})。这是因为我不能将3D数组写入.csv文件吗?在Julia中有没有一种方法可以将3D数组写入.csv文件? - seeker_after_truth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接