Simple java API to read, transform, sort, filter and aggregate tables.
Add the following repository to your pom.xml or gradle file:
<repository>
<id>bintray-lukfor-maven</id>
<name>bintray</name>
<url>https://dl.bintray.com/lukfor/maven</url>
</repository>
Add the following dependency:
<dependency>
<groupId>com.github.lukfor</groupId>
<artifactId>magic-tables</artifactId>
<version>0.3.0</version>
</dependency>
Table table = TableBuilder.fromCsvFile("data/dummy.csv").load();
Table table = TableBuilder.fromCsvFile("data/dummy.csv").withSeparator('\t').load();
table.printSummary();
table.print()
Table table = TableBuilder.fromXlsFile("data/dummy.xls").load();
By default TableBuilder
tries to find the correct datatype for each column. But you can also change the type of a column manually:
table.setColumnType("id", ColumnType.INTEGER);
table.setColumnType("population", ColumnType.DOUBLE);
table.setColumnType("city", ColumnType.STRING);
In addition you can disable columnTypeDetection
and load all columns as strings:
Table table = TableBuilder.fromXlsFile("data/dummy.xls").withColumnTypeDetection(false).load();
TableWriter.writeToCsv(table, "id.csv");
TableWriter.writeToXls(table, "id.csv");
Object o = table.get(rowIndex, "column_name")
Object o = table.get(rowIndex, columnIndex)
getRow
provides typesafe methods:
table.getRow(rowIndex).getObject("column_name");
table.getRow(rowIndex).getInteger("column_name");
table.getRow(rowIndex).getDouble("column_name");
table.getRow(rowIndex).getString("column_name");
table.print() //(prints first 25 rows)
table.printFirst(n)
table.printLast(n)
table.printAll()
table.printBetween(index1, index2)
table.getColumns().getMissings()
table.getColumns().getUniqueValues()
table.getColumns().getNames()
table.getColumns().getTypes()
table.getColumns().getSize()
table.getColumn("column_name").print()
table.getColumn("column_name").getSummary()
table.getColumn("column_name").getMean()
table.getColumn("column_name").getMin()
table.getColumn("column_name").getMax()
table.getColumn("column_name").getMissings()
table.getColumn("column_name").getUniqueValues()
table.getRows().getAll("column_name", "value")
table.getRows().getAllByRegEx("column_name", "value|value2")
table.getRows().getSize()
table.getRows().selectByRegEx("column_name", "a|b")
table.getRows().select(filter)
table.getRows().select(bitmask)
table.getRows().dropByRegEx("column_name", "a|b")
table.getRows().drop(filter)
table.getRows().drop(bitmask)
table.getColumns().select("name1","name2","name3", ...)
table.getColumns().selectByRegEx("col_.*");
table.getColumns().select(filter);
table.getColumns().drop("name1","name2","name3", ...)
table.getColumns().dropByRegEx("col*");
table.getColumns().drop(filter);
Special functions:
table.getRows().dropMissings();
table.getRows().dropMissings("column_name");
table.getRows().dropDuplicates()
table.fillMissings("value");
table.getColumn("column_name").fillMissings("value");
table.replaceValue("old","new");
table.getColumn("column_name").replaceValue("old","new");
table.getColumn("column_name").apply(function);
table.getColumns().append("column_name", builder())
table.getColumns().rename("column_name", "new_name")
Row row = table.getRows().append();
row.set("column_name", value);
table.getRows().sortAscBy("column_name");
table.getRows().sortDescBy("column_name");
table.append(table2)
table1.merge(table2, column); //left join on table1.column = table.column
table1.merge(table2, column1, column2); //left join on table1.column1 = table2.column2
Work in progress:
table.melt(..)
table.merge(table, column, LEFT | RIGHT | OUTER | INNER
table.groupBy("column_name").count()
table.groupBy("column_name").sum("value_name")
table.groupBy("column_name").min("value_name")
table.groupBy("column_name").max("value_name")
table.groupBy("column_name").mean("value_name")
table.groupBy(mapper(), aggregator())
magic-tables
is MIT Licensed.