Импорт и экспорт данных (ввод-вывод)
CSV-файлы
Для чтения и записи табличных данных из CSV и других разделенных текстовых файлов следует использовать пакет CSV.jl.
Если вы раньше не использовали пакет CSV.jl, может понадобиться сначала установить его:
using Pkg
Pkg.add("CSV")
Функции CSV.jl не загружаются автоматически и должны быть импортированы в сеанс.
using CSV
Теперь набор данных можно считать из CSV-файла по пути input
, используя
DataFrame(CSV.File(input))
DataFrame
можно записать в CSV-файл по пути output
, используя
df = DataFrame(x=1, y=2)
CSV.write(output, df)
Поведение функций CSV можно настроить с помощью именованных аргументов. Дополнительные сведения см. в описании ?CSV.File
, ?CSV.read
, ?CSV.write
или в онлайн-документации по CSV.jl.
В простых случаях, когда задержка компиляции CSV.jl может быть проблемой, можно использовать модуль DelimitedFiles
из стандартной библиотеки Julia. Далее приведен пример, показывающий, как считывать данные и выполнять их последующую обработку.
julia> using DelimitedFiles, DataFrames
julia> path = joinpath(pkgdir(DataFrames), "docs", "src", "assets", "iris.csv");
julia> data, header = readdlm(path, ',', header=true);
julia> iris_raw = DataFrame(data, vec(header))
150×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Any Any Any Any Any
─────┼──────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 Iris-setosa
2 │ 4.9 3.0 1.4 0.2 Iris-setosa
3 │ 4.7 3.2 1.3 0.2 Iris-setosa
4 │ 4.6 3.1 1.5 0.2 Iris-setosa
5 │ 5.0 3.6 1.4 0.2 Iris-setosa
6 │ 5.4 3.9 1.7 0.4 Iris-setosa
7 │ 4.6 3.4 1.4 0.3 Iris-setosa
8 │ 5.0 3.4 1.5 0.2 Iris-setosa
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
144 │ 6.8 3.2 5.9 2.3 Iris-virginica
145 │ 6.7 3.3 5.7 2.5 Iris-virginica
146 │ 6.7 3.0 5.2 2.3 Iris-virginica
147 │ 6.3 2.5 5.0 1.9 Iris-virginica
148 │ 6.5 3.0 5.2 2.0 Iris-virginica
149 │ 6.2 3.4 5.4 2.3 Iris-virginica
150 │ 5.9 3.0 5.1 1.8 Iris-virginica
135 rows omitted
julia> iris = identity.(iris_raw)
150×5 DataFrame
Row │ SepalLength SepalWidth PetalLength PetalWidth Species
│ Float64 Float64 Float64 Float64 SubStrin…
─────┼──────────────────────────────────────────────────────────────────
1 │ 5.1 3.5 1.4 0.2 Iris-setosa
2 │ 4.9 3.0 1.4 0.2 Iris-setosa
3 │ 4.7 3.2 1.3 0.2 Iris-setosa
4 │ 4.6 3.1 1.5 0.2 Iris-setosa
5 │ 5.0 3.6 1.4 0.2 Iris-setosa
6 │ 5.4 3.9 1.7 0.4 Iris-setosa
7 │ 4.6 3.4 1.4 0.3 Iris-setosa
8 │ 5.0 3.4 1.5 0.2 Iris-setosa
⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮
144 │ 6.8 3.2 5.9 2.3 Iris-virginica
145 │ 6.7 3.3 5.7 2.5 Iris-virginica
146 │ 6.7 3.0 5.2 2.3 Iris-virginica
147 │ 6.3 2.5 5.0 1.9 Iris-virginica
148 │ 6.5 3.0 5.2 2.0 Iris-virginica
149 │ 6.2 3.4 5.4 2.3 Iris-virginica
150 │ 5.9 3.0 5.1 1.8 Iris-virginica
135 rows omitted
Обратите внимание, что в нашем примере
-
header
— этоMatrix
, поэтому мы должны были передатьvec(header)
в конструкторDataFrame
; -
мы транслировали функцию
identity
через фрейм данныхiris_raw
, чтобы выполнить сужениеeltype
столбцовiris_raw
. Причина в том, что данные, считанные функциейreaddlm
, хранятся вdata
Matrix
, поэтому все столбцы вiris_raw
изначально имеют одинаковый типeltype
— в данном случае он должен иметь значениеAny
, поскольку некоторые столбцы являются числовыми, а некоторые — строковыми.
Все эти операции (и многие другие) пакет CSV.jl обрабатывает автоматически.
Аналогично, вы можете использовать функцию writedlm
из модуля DelimitedFiles
, чтобы сохранить фрейм данных следующим образом:
writedlm("test.csv", Iterators.flatten(([names(iris)], eachrow(iris))), ',')
Как видно, код, необходимый для преобразования iris
в нужные входные данные для функции writedlm
с целью создания CSV-файла ожидаемого формата, не так прост. Поэтому CSV.jl является предпочтительным пакетом для записи CSV-файлов для данных, хранящихся во фреймах данных.
Другие форматы
Другие форматы данных поддерживаются для чтения и записи в следующих пакетах (список не является исчерпывающим):
-
Apache Arrow (включая Feather версии 2): Arrow.jl
-
Apache Feather (версия 1): Feather.jl
-
Apache Avro: Avro.jl
-
JSON: JSONTables.jl
-
Parquet: Parquet2.jl
-
Stata, SAS и SPSS: ReadStatTables.jl (или пользователи Queryverse могут выбрать StatFiles.jl)
-
Чтение файлов данных R (.rda, .RData): RData.jl
-
Microsoft Excel (XLSX): XLSX.jl
-
Копирование или вставка в буфер обмена для отправки данных в электронные таблицы и из них: ClipData.jl