Как импортировать данные из электронной таблицы ODS (используемые OpenOffice, LibreOffice, ...) в DataFrame от Julia?Как читать документ ods (например, LibreOffice calc) и преобразовывать его в блок данных Julia?
(это сообщество вики Q & A)
Как импортировать данные из электронной таблицы ODS (используемые OpenOffice, LibreOffice, ...) в DataFrame от Julia?Как читать документ ods (например, LibreOffice calc) и преобразовывать его в блок данных Julia?
(это сообщество вики Q & A)
Если питон установлен на машине, ezodf модуль может быть использован довольно прямолинейно Джулией, используя PyCall:
using PyCall
using DataFrames
@pyimport ezodf
doc = ezodf.opendoc("test.ods")
nsheets = length(doc[:sheets])
println("Spreadsheet contains $nsheets sheet(s).")
for sheet in doc[:sheets]
println("---------")
println(" Sheet name : $(sheet[:name])")
println("Size of Sheet : (rows=$(sheet[:nrows]()), cols=$(sheet[:ncols]()))")
end
# convert the first sheet to a dictionary
sheet = doc[:sheets][1]
df_dict = Dict()
col_index = Dict()
for (i, row) in enumerate(sheet[:rows]())
# row is a list of cells
# assume the header is on the first row
if i == 1
# columns as lists in a dictionary
[df_dict[cell[:value]] = [] for cell in row]
# create index for the column headers
[col_index[j]=cell[:value] for (j, cell) in enumerate(row)]
continue
end
for (j, cell) in enumerate(row)
# use header instead of column index
append!(df_dict[col_index[j]],cell[:value])
end
end
# and convert the dictionary to a DataFrame
df = DataFrame(df_dict)
(это просто переписывание в Джулии питона кода Давидович в on this answer)
EDIT:
Теперь я написал на основе этого кода пакет Julia: OdsIO.
Он предоставляет несколько функций для импорта данных из файлов ods (включая диапазон ячеек), и, надеюсь, скоро это также позволит экспортировать.
EDIT2:
Экспорт в ODS теперь поддерживается начиная с версии v0.1.0