把xlsx和xls读到DataFrame中的几个方法

关键词:Julia; Excel, xlsx, xls, csv; Dataframe

Julia读取csv文件,挺方便的。

using CSV, DataFrames

df = DataFrame(CSV.File("file.csv"))  # 写法1:常规写法;
df = CSV.File("file.csv")|>DataFrame  # 写法2:链式,记得在R语言中常见链式。

在读写Excel文档方面,XLSX.jl官网中,提到了Julia常用的Excel读写包。结合本人浅尝辄止的使用,向大家分享一些经验,同时指出一些小坑,希望对大家有帮助。

ExcelFiles.jl 和 ExcelReader.jl(前者依赖后者)

依赖:调用Python的xlrd包。相关设置,请点击这里

格式:仅支持xls格式,因为它依赖的xlrd目前只支持xls格式。xlrd已官宣不支持xlsx

痛点:在读取文件时,range(形如A1:B5)名不能省略,这就非常不方便了。

其他:目前,官方范例中读取的仍旧是xlsx文件。但从更新日志来看,2.0.0版本开始,就已不再支持xls以外格式。降级办法,参考这里

示例:

using ExcelFiles, DataFrames

df = DataFrame(load("data.xls", "Sheet1"))   # 注意:最新版xlrd只支持xls、不支持xlsx

Taro.jl

依赖:调用Java包。

格式:文档显示支持xlsx和xls格式。

痛点:如果没有教程,设置起来不容易。好在,给大家趟了路,在这里看教程。

示例:

using Taro, DataFrames
Taro.init()  # 一定要加这行
df=Taro.readxl("file.xls", 0,"A1:B5")|>DataFrame

## XLSX.jl
依赖:无。原生Julia包。不依赖Python,不依赖Java,安装后即可使用。

格式:仅支持xlsx格式,就像它的名字所暗示的那样,

痛点:不支持xls。

示例:
```julia
using DataFrames, XLSX

df = DataFrame(XLSX.readtable("result.xlsx",1)...) # 1代表sheet索引,...不可省略

其他方案

上面的解决方案均在Julia下,你也可以用Python pandas把Excel文件转为csv,再送到Julia;也可以把数据加载到MySQL等数据库中,再从中读取数据。小项目,或者数据量小,怎么方便快捷,就怎么来。

还有pycall调用pandas,也是个思路。本人并没试过。

这只是个汇总贴,希望能为大家节约一些查资料的时间。所述经验,可能本身存在疏漏错误。同时,Julia社区对包的开发迅速,“此一时,彼一时”,现在有用的经验,也可能会随着时间的流逝而变得无效。

更多信息,请参考官方文档

ExcelFiles.jl - from github

Taro.jl - Work with Excel, Word and PDF files in Julia

XLSX.jl Tutorial

7 个赞

截止20230511,在一次包更新之后,下条命令已经不能运行

df = DataFrame(XLSX.readtable("result.xlsx",1)...) # 1代表sheet索引,...不可省略

需要改为

df = DataFrame(XLSX.readtable("result.xlsx",1)) # 1代表sheet索引,20230511发现不再支持...

发现帖子不能编辑,所以,把最新发现的情况写在回复里。