Polars Rust API 从字符串变量创建数据帧/使用字符串中的选项读取 csv

问题描述 投票:0回答:1

使用 Polars Rust API,是否可以直接从 CSV 字符串/读取器创建 DataFrame,同时指定分隔符等选项?

目前,我正在通过将字符串保存到临时路径并使用

LazyCsvReader::new("tmp_path.csv")
读取它来解决此问题。

在最终的用例中,(可能很大的)CSV 数据通过例如接收一个请求。

use anyhow::Result;
use polars::prelude::*;

fn main() -> Result<()> {
    let csv_str = "name|age|city
Alice|30|New York
Bob|25|London";

    // Writing it to a file, but I'd prefer to read the CSV data directly.
    std::fs::write("tmp.csv", csv_str)?;
    let df = LazyCsvReader::new("tmp.csv").with_separator(b'|').finish()?.collect()?;

    // Also tried `CsvReader`, though I couldn't figure out how to make it work with a custom delimiter.
    /* let cursor = std::io::Cursor::new(csv_str);
    let df = CsvReader::new(cursor).finish()?; */

    println!("{df}");

    Ok(())
}
csv rust rust-polars polars
1个回答
0
投票

您可以使用

into_reader_with_file_handle
结构体的
CsvReadOptions
方法来使用文件句柄创建 CSV 读取器。还可以使用
map_parse_options
功能设置自定义分隔符。

use polars::prelude::*;

fn main() {
    let csv_str = "name|age|city
Alice|30|New York
Bob|25|London";
    let cursor = std::io::Cursor::new(csv_str);

    let df = CsvReadOptions::default()
        .with_has_header(true)
        .map_parse_options(|parse_options| parse_options.with_separator(b'|'))
        .into_reader_with_file_handle(cursor)
        .finish()
        .unwrap();
    println!("{:?}", df);
}
© www.soinside.com 2019 - 2024. All rights reserved.