Hello everyone,

I am happy to share my DataFrame library for D. My primary focus was to make it simple to use and I haven't spent a lot of time optimizing the code for memory and performance.

Example:

```d
import std.stdio;
import std.algorithm;
import std.array;
import std.range;

import dataframes;

struct Product
{
    string name;
    double unitPrice;
    int quantity;
    double discount;
    double totalPrice;
}

const DISCOUNTS = [
    "WELCOME": 5,
    "HAPPY": 2
];

double[] applyDiscounts(Column!double values, string coupon = "")
{
    auto pct = coupon in DISCOUNTS;
    if (pct is null)
        return iota(values.length).map!("0.0").array;

    return values.map!(v => v * (*pct/100.0)).array;
}

void main(string[] args)
{
    auto coupon = args.length > 1 ? args[1] : "";
    auto df = new DataFrame!Product(
        name: ["p1", "p2", "p3", "p4"],
        unitPrice: [10.0, 15.0, 5.0, 20.0],
        quantity: [3, 1, 5, 2]
    );

    df.discount = df.unitPrice.applyDiscounts(coupon);
    df.totalPrice = (df.unitPrice - df.discount) * df.quantity;

    // Preview
    df.writeln;

    auto total = df.rows
        .map!(r => r.totalPrice)
        .sum;

    writeln("Total: ", total);
}
```

Highlights:

- Creates a new Class with all the fields of the given struct as arrays. - Supports column operations like adding two columns or multiplying each values of the elements etc. - `df.rows` will return the list of `Row` with only reference to the main data.
- Easy to use with `std.algorithm` goodies (Refer README).

Add `dataframes` to your project by running,

```
dub add dataframes
```

The code and the documentation are available on GitHub https://github.com/aravindavk/dataframes-d and https://code.dlang.org/packages/dataframes

Please feel free to use it and let me know your experience and suggestions.

Thanks
Aravinda

Reply via email to