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.
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
Check out docs.rs for latest documentation.
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"]);
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()?;
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()?;
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()?;