Как прочитать документ ods (например, LibreOffice calc) и преобразовать его в фрейм данных Julia?

Как импортировать данные из электронной таблицы ODS (используемой OpenOffice, LibreOffice,...) в кадре данных Julia?

(это вики-сообщество)

1 ответ

Если на компьютере установлен python, Юлия может использовать модуль 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)

(это просто переписывание в Джулии кода Python Давидовича на этот ответ)

РЕДАКТИРОВАТЬ:

Теперь я написал на основе этого кода пакет Julia: OdsIO.

Он предоставляет несколько функций для импорта данных из файлов ods (включая диапазон ячеек), и, надеюсь, скоро он также разрешит экспорт.

EDIT2:

Экспорт в Ods теперь поддерживается начиная с версии v0.1.0

Другие вопросы по тегам