Need help with utah?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

kernelmachine
130 Stars 10 Forks MIT License 162 Commits 1 Opened issues

Description

Dataframe structure and operations in Rust

Services available

!
?

Need anything else?

Contributors list

# 231,711
Python
Jupyter...
Shell
Rust
159 commits

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 = 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::new(a).index(&["1", "2"]);

Transform the dataframe

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

Chain operations

use utah::prelude::*;
let df: DataFrame = DataFrame::read_csv("test.csv").unwrap();       
let res : DataFrame = 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 = 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 = DataFrame::read_csv("test.csv").unwrap();
let res : DataFrame = a.concat(&b).as_df()?;

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.