Crates.io | black-jack |
lib.rs | black-jack |
version | 0.1.0 |
source | src |
created_at | 2018-08-18 15:02:05.207663 |
updated_at | 2019-04-28 11:08:38.444269 |
description | DataFrame / Series / general data processing in Rust |
homepage | |
repository | https://github.com/milesgranger/black-jack |
max_upload_size | |
id | 80072 |
size | 117,564 |
BlackJack strives to be a full featured crate for general data processing.
Long term goal is to create a lightweight Pandas equivalent by and for the Rust community, but with slight differences in focus...
The project strives for a few key principles. When any implementation decisions are to be made, they are made with these principles in mind, and in this order:
Pandas
API where possible.It comes naturally most times with Rust. :)
Eventually we'll have a Python wrapper: Lumber-Jack associated with this crate, but that time will come.
// We have a dataframe, of course...
let mut df = DataFrame::new();
// Make some series, of different types
let series_i32: Series<i32> = Series::arange(0, 5);
let mut series_f64: Series<f64> = Series::from_vec(vec![1.0, 2.0, 3.0, 4.0, 5.0]);
// You can set a series name!
series_f64.set_name("my-series");
// Or not...
assert_eq!(series_i32.name(), None);
// And add them to the dataframe
df.add_column(series_f64).unwrap();
df.add_column(series_i32).unwrap();
// And then get a reference to a Series
let series_f64_ref: &Series<f64> = df.get_column("my-series").unwrap();
Also supports reading .gz
files
// Define the path to file
let path: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/tests/data/medium_csv.csv");
// Use the `Reader` to read the dataframe
let df = Reader::new(&path).read().expect("Failed to read file");
// Get a refrence to a specific column and assert the sum of that series
let series2: &Series<i32> = df.get_column("col2").unwrap();
assert_eq!(series2.sum(), 3000);
let mut s1 = Series::from(0..5);
s1.set_name("col1");
let mut s2 = Series::from(10..15);
s2.set_name("col2");
let mut s3 = Series::from_vec(vec![
"foo".to_string(),
"bar".to_string(),
"foo".to_string(),
"bar".to_string(),
"foo".to_string(),
]);
s3.set_name("col3");
let mut df = DataFrame::new();
assert!(df.add_column(s1).is_ok());
assert!(df.add_column(s2).is_ok());
assert!(df.add_column(s3).is_ok());
// Before filtering, we're len 5 and first element of 'col1' is 0
assert_eq!(df.len(), 5);
df.filter_by_row(|row| row["col1"] == Datum::I32(&0));
// After filtering, we're len 4 and first element of 'col1' is now 1
assert_eq!(df.len(), 4);
// Filter by string foo,
df.filter_by_row(|row| row["col3"] != Datum::STR(&"foo".to_string()));
assert_eq!(df.len(), 2);
sudo dnf install gsl-devel
sudo apt-get install libgsl-dev
All contributions are welcome. Contributors of this project are expected to treat all others with respect and dignity; acknowledging there will be differences of opinion and strive to provide a welcoming environment for others, regardless of skill level.
Additionally, all contributions, unless otherwise stated, will be given under the Unlicense and/or MIT licenses.