black-jack
Library Archived
DataFrame / Series / general data processing in Rust
- Downloads
- 1
- Dependents
- 0
- Stars
- 31
- Forks
- 5
- Contributors
- 3
- Commits
- 217
- Latest release
- 0.1.0 ·
Why Archived
GitHub reports the repository as archived.
Exact rules: Instant archive. The check on applied thresholds version 9.
Every rule outcome, as the check records it
instant-archive: repository is archived
About
While PRs are welcome, the approach taken only allows for concrete types (String, f64, i64, ...) I'm not sure this is the way to go. I want to think that using anything which implements serde::{Serialize, Deserialize} and better use of traits may have more flexibility, just not sure how to do that yet. The project is not abandoned, just in limbo. :-)
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:
- Memory efficiency
- Minimize memory use at every opportunity.
- Usability
- Strive for ergonomics; often done by modeling the
PandasAPI where possible.
- Strive for ergonomics; often done by modeling the
- Speedy
- 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.
Read the full README
Example use:
// 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();
Read a CSV file:
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);
Query/filter a dataframe
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);
and a whole lot more..
Development
- Rust >= 1.31
- GSL ~= 2.4
- Fedora:
sudo dnf install gsl-devel - Ubuntu:
sudo apt-get install libgsl-dev - Windows Install Instructions
- Fedora:
Contributing
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.
Compatibility
- Runs on
- GPU support unknown
What shows it
- no dependency or feature matches a backend row
- Native code
- Required
- Binds native code: GSL-sys
- Python bindings
- No Python binding crate found
- License
- GPL-3.0
Compare with similar projects
Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
DataFrame / Series / general data processing in Rust |
1 downloads over 30 days | 0 | 31 | 0.1.0 | GPU support unknown | Binds native code: GSL-sys | GPL-3.0 |
|
arrow-rs Featured
Rust implementation of Apache Arrow Python bindings |
10,746,755 downloads over 30 days | 2,126 | 3,664 | 60.1.0 | GPU support unknown | Binds native code: ring (feature encryption), liblzma-sys (feature default), zstd-sys (feature default) | Apache-2.0 |
|
polars Featured
DataFrame library based on Apache Arrow Python bindings |
1,729,523 downloads over 30 days | 639 | 40,285 | 0.55.2 | GPU support unknown | Binds native code: zstd-sys (feature decompress) | MIT |
|
elusion Listed
Elusion is a modern DataFrame / Data Engineering / Data Analysis library that combines the familiarity of DataFrame operations (like those in PySpark, Pandas, and Polars) with the power of SQL query building. |
27 downloads over 30 days | 0 | 144 | 9.0.0 | GPU support unknown | Binds native code: ring, openssl-sys | MIT |
|
Drop-in Apache Spark replacement written in Rust, unifying batch processing, stream processing, and compute-intensive AI workloads. |
0 binary downloads per release | Not applicable | 3,491 | Not measured | Not measured | Apache-2.0 | |
|
Model conversion and quantization with no Python: reads SafeTensors, GGUF, TCF and PyTorch state dicts, writes SafeTensors, GGUF and TCF, and quantizes to Q2_K through Q8_0 and IQ4 formats, including Q4_K_M mixes. GPTQ, AWQ, NF4, FP8, EXL2 and ONNX input are not implemented. Python bindings |
23 downloads over 30 days | Not applicable | 0 | 0.2.1 | GPU support unknown | No native code found | Apache-2.0 |
|
A Rust DataFrame implementation, built on Apache Arrow |
Not measured | Not applicable | 280 | Not measured | Not measured | Not measured | Apache-2.0 |
Measurements and sources
Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.
Sources6 sources
- Description: the crates.io description
- crates.io database dump, fetched
- RustSec advisory database, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption0 active dependents, 0 new dependents in 365 days1 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | 0 | crates.io database dump | Yes | |
| New dependents (365 days) | 0 | crates.io database dump | Yes | |
| Peak active dependents | 0 | crates.io database dump | Yes | |
| Active dependents as a share of the peak | 1 | crates.io database dump | Yes | |
| Binary downloads per release | Not measured | Yes |
MaintenanceLatest human commit: 6 years ago3 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2020-02-15 | GitHub repository | Yes | |
| Latest release | 2019-04-28 | crates.io database dump | Yes | |
| First release | 2018-08-18 | crates.io database dump | Yes | |
| Latest version | 0.1.0 | crates.io database dump | Yes | |
| Days the oldest outside issue waits for a reply | 2190 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 0 | GitHub repository | Yes | |
| Repository archived | true | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | Yes | |
| Published docs | true | crates.io database dump | Yes | |
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityUnpatched vulnerabilities: none
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | none | RustSec advisory database | Yes | |
| RustSec unmaintained advisory | none | RustSec advisory database | Yes | |
| Deprecation notice | none | crates.io database dump | Yes | |
| Deprecated requirement | bincode (RUSTSEC-2025-0141, https://rustsec.org/advisories/RUSTSEC-2025-0141.html) | crates.io database dump | Yes |
Distribution10 releases, 1 downloads over 30 days5 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 10 | crates.io database dump | Yes | |
| Downloads over 30 days | 1 | crates.io database dump | Yes | |
| Binary downloads over the last 3 releases | Not measured | Yes | ||
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | false | crates.io database dump | Yes | |
| Crate deleted from crates.io | false | crates.io database dump | Yes |
Repository31 stars, 5 forks, 3 contributors, 217 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 31 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 5 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 3 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 217 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | GPL-3.0 | GitHub repository | No | |
| Runs on, from listed crates and their direct dependencies | GPU support unknown | crates.io database dump | No | |
| What shows each backend | no dependency or feature matches a backend row | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: GSL-sys | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | 0 | crates.io database dump | No |
Corrections and review history
No correction applies to this entry.
Judgments
A judgment enters only through an approved issue and a merged pull request.
No judgment applies to this entry.