Dataframe structure and operations in Rust
Switch branches/tags
Nothing to show
Clone or download
Suchin
Latest commit 79d3bb3 Jul 24, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src updated macro Dec 28, 2016
.gitignore added initial files Sep 19, 2016
.travis.yml added docs Dec 27, 2016
Cargo.lock updated macro Dec 28, 2016
Cargo.toml updated toml Dec 28, 2016
LICENSE Initial commit Sep 19, 2016
README.md Update README.md Jul 24, 2018

README.md

Utah

Build Status

Utah is a Rust crate backed by ndarray for type-conscious, tabular data manipulation with an expressive, functional interface.

Note: This crate works on stable. However, if you are working with dataframes with f64 data, use nightly, because you will get the performance benefits of specialization.

API currently in development and subject to change.

For an in-depth introduction to the mechanics of this crate, as well as future goals, read this blog post.

Install

Add the following to your Cargo.toml:

utah="0.1.2"

And add the following to your lib.rs or main.rs

#[macro_use]
extern crate utah

Documentation

Check out docs.rs for latest documentation.

Examples

Create dataframes on the fly

use utah::prelude::*;
let df = DataFrame<f64> = dataframe!(
    {
        "a" =>  col!([2., 3., 2.]),
        "b" =>  col!([2., NAN, 2.])
    });

let a = arr2(&[[2.0, 7.0], [3.0, 4.0]]);
let df : Result<DataFrame<f64>> = DataFrame::new(a).index(&["1", "2"]);

Transform the dataframe

use utah::prelude::*;
let df: DataFrame<f64> = DataFrame::read_csv("test.csv").unwrap();       
let res : DataFrame<f64> = df.remove(&["a", "c"], UtahAxis::Column).as_df()?;

Chain operations

use utah::prelude::*;
let df: DataFrame<f64> = DataFrame::read_csv("test.csv").unwrap();       
let res : DataFrame<f64> = df.df_iter(UtahAxis::Row)
                                     .remove(&["1"])
                                     .select(&["2"])
                                     .append("8", new_data.view())
                                     .sumdf()
                                     .as_df()?;

Support mixed types

use utah::prelude::*;
let a = DataFrame<InnerType> = dataframe!(
    {
        "name" =>  col!([InnerType::Str("Alice"),
                            InnerType::Str("Bob"),
                            InnerType::Str("Jane")]),
        "data" =>  col!([InnerType::Float(2.0),
                            InnerType::Empty(),
                            InnerType::Float(3.0)])
    });
let b: DataFrame<InnerType> = DataFrame::read_csv("test.csv").unwrap();
let res : DataFrame<InnerType> = a.concat(&b).as_df()?;