S-JIS[2024-10-21] 変更履歴

polars DataFrame構造体

RustpolarsのDataFrameのメモ。


概要

DataFrameは、(テーブル)っぽいデータを扱う構造体


DataFrameを作る例

use polars::{
    error::PolarsError,
    frame::DataFrame,
    prelude::NamedFrom,
    series::Series,
};
fn create_data_frame() -> Result<DataFrame, PolarsError> {
    let array1 = [1, 2, 3, 4];
    let array2 = [11_i64, 22_i64, 33_i64, 44_i64];
    let array3 = ["aaa", "bbb", "ccc", "ddd"];

    let series1 = Series::new("foo".into(), array1);
    let series2 = Series::new("bar".into(), array2);
    let series3 = Series::new("zzz".into(), array3);
    let columns = vec![series1, series2, series3];

    let df = DataFrame::new(columns)?;
    Ok(df)
}

DataFrameはVec<Series>を渡して生成する。

Seriesのnew()を呼ぶ為にはNamedFromもインポート(use)しておく必要がある。

Series::new()の第1引数(カラム名)の型はPlSmallStrなので、&strから変換する為にinto()を呼んでいる。


nullを扱う例

nullを扱いたい場合は、渡すデータをOptionにする。

    let array2 = [Some(11_i64), Some(22_i64), None, Some(44_i64)];

Vecを使う例

渡すデータにはVecを使うことも出来る。

    let mut vec1 = Vec::new();	// Vec<i32>
    let mut vec2 = Vec::new();	// Vec<Option<i64>>
    let mut vec3 = Vec::new();	// Vec<&str>

    for (foo, bar, zzz) in [(1, 11, "aaa"), (2, 22, "bbb"), (3, -1, "ccc")] {
        vec1.push(foo);
        if bar >= 0 {
            vec2.push(Some(bar as i64));
        } else {
            vec2.push(None);
        }
        vec3.push(zzz);
    }

    let series1 = Series::new("foo".into(), vec1);
    let series2 = Series::new("bar".into(), vec2);
    let series3 = Series::new("zzz".into(), vec3);
    let columns = vec![series1, series2, series3];
    let df = DataFrame::new(columns)?;

polarsへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま