joinery是一个类似python中pandas库功能的api,可对dataframe对象做按列、行取数,groupby聚合,sort排序等类似sql语句功能的操作。
-
- 官方文档:joinery
-
- maven引入:
joinery读取csvsh.joinery joinery-dataframe 1.10
joinery有现成的方法可以直接调用
Dataframe df = Dataframe.readCsv(String filePath);joinery读取excel
这里以.xlsx文件为例,我们知道pandas有readexcel方法可以读取xlsx文件,可惜的是joinery目前并没有可直接使用的接口,我们需要通过引入另一个api——poi 来辅助实现该功能。
poi简介poi是一个提供处理微软旗下各种类型文件方法的api。
-
- 官方文档:poi_javaapi
-
- maven引入:
org.apache.poi poi 5.0.0
我们先使用poi读取.xlsx文件,然后写入到dataframe里。参考以下代码,输入文件路径fileName,可得到一个dataframe。
package ...;
import joinery.Dataframe;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ExcelOperation extends FileOperation {
@Override
public Dataframe getDf(String fileName) throws IOException {
Workbook sheets = new XSSFWorkbook(fileName);
Sheet sheet = sheets.getSheetAt(0);
int firstRowNum = sheet.getFirstRowNum();
int lastRowNum = sheet.getLastRowNum();
Row firstRow = sheet.getRow(firstRowNum);
List col = new ArrayList<>();
for (int i = 0; i < firstRow.getLastCellNum(); i++) {
col.add(firstRow.getCell(i).toString());
}
Dataframe df = new Dataframe<>(col);
for (int i = firstRowNum + 1; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
List
使用 joinery的好处
通过以上实例,相信你们已经学会如何将.csv和.xlsx文件写入一个df了,之后我们就可以愉快的使用joinery进行数据操作了。
将文件都转成dataframe使得后续的操作只需关注df对象本身,比如文件数据插入数据库时,新增了一种输入文件类型,这时只需新增相应的fileoperation子类,而无需重写文件写入数据库的方法,达到高耦合低内聚的效果。



