跳到内容

CSV

读取与写入

读取 CSV 文件的方式应该很熟悉

read_csv

df = pl.read_csv("docs/assets/data/path.csv")

CsvReader · 在功能 `csv` 中可用

use polars::prelude::*;

let mut df = df!(
    "foo" => &[1, 2, 3],
    "bar" => &[None, Some("bak"), Some("baz")],
)
.unwrap();

let mut file = std::fs::File::create("docs/assets/data/path.csv").unwrap();
CsvWriter::new(&mut file).finish(&mut df).unwrap();

let df = CsvReadOptions::default()
    .try_into_reader_with_file_path(Some("docs/assets/data/path.csv".into()))
    .unwrap()
    .finish()
    .unwrap();

写入 CSV 文件的方式与 write_csv 函数类似

write_csv

df = pl.DataFrame({"foo": [1, 2, 3], "bar": [None, "bak", "baz"]})
df.write_csv("docs/assets/data/path.csv")

CsvWriter · 在功能 `csv` 中可用

let mut df = df!(
    "foo" => &[1, 2, 3],
    "bar" => &[None, Some("bak"), Some("baz")],
)
.unwrap();

let mut file = std::fs::File::create("docs/assets/data/path.csv").unwrap();
CsvWriter::new(&mut file).finish(&mut df).unwrap();

扫描

Polars 允许你 *扫描* CSV 输入。扫描操作会延迟文件的实际解析,并返回一个称为 LazyFrame 的惰性计算持有者。

scan_csv

df = pl.scan_csv("docs/assets/data/path.csv")

LazyCsvReader · 在功能 `csv` 中可用

let lf = LazyCsvReader::new("docs/assets/data/path.csv")
    .finish()
    .unwrap();

如果你想了解为什么这种方式值得推荐,可以在此处阅读更多关于 Polars 优化功能的信息。