0%

【Polars】基于Rust内核的Jupyter Notebook中的Polars数据表格呈现

为了在Jupyter Notebook中使用RustPolars库以类似于Pandas的方式输出HTML表格,我们可以使用 evcxr_jupyter 内核和HTML格式化。虽然Rust没有直接提供像Pandas那样的内置HTML表格输出,但我们可以通过手动构建HTML表格并在Jupyter Notebook中显示来实现这一点。

以下是一个详细的指南和示例代码:

安装和设置

  1. 安装 Rust 和 evcxr_jupyter 内核 首先,确保你已经安装了Rust,然后安装 evcxr_jupyter

    1
    2
    cargo install evcxr_jupyter
    evcxr_jupyter --install

  2. 启动 Jupyter Notebook 启动Jupyter Notebook并新建一个Rust内核的笔记。

编写代码

以下是一个使用Polars库创建DataFrame并生成HTML表格的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
:dep polars = {version = "0.39.1"}
:dep serde_json = "1.0"

use polars::prelude::*;
use polars::df;
use polars::frame::DataFrame;
use serde_json::json;
use std::fmt::Write;

fn create_dataframe() -> DataFrame {
let s0 = Series::new("days", &["mon", "tue", "wed", "thu", "fri"]);
let s1 = Series::new("temp", &[23, 34, 15, 30, 10]);
DataFrame::new(vec![s0, s1]).expect("DataFrame creation failed")
}

fn dataframe_to_html(df: &DataFrame) {
let columns = df.get_columns();
let headers: Vec<&str> = columns.iter().map(|s| s.name()).collect();
let mut html = String::new();

write!(
html,
"<table border=\"1\"><tr>{}</tr>",
headers
.iter()
.map(|h| format!("<th>{}</th>", h))
.collect::<Vec<String>>()
.join("")
)
.unwrap();

for i in 0..df.height() {
write!(html, "<tr>").unwrap();
for col in columns.iter() {
write!(html, "<td>{}</td>", col.get(i).unwrap()).unwrap();
}
write!(html, "</tr>").unwrap();
}

write!(html, "</table>").unwrap();
println!("EVCXR_BEGIN_CONTENT text/html\n{}\nEVCXR_END_CONTENT", html);
}

let df = create_dataframe();
let html_table = dataframe_to_html(&df);
html_table

解释代码

  1. 加载依赖项Jupyter Notebook中,我们使用 :dep 命令来添加所需的依赖项:polarsserde_json

  2. 创建 DataFrame 函数 create_dataframe 创建了一个简单的DataFrame,包含两个列:daystemp

  3. 生成 HTML 表格 函数 dataframe_to_htmlDataFrame转换为HTML表格格式:

    • 获取DataFrame的列并生成表头。
    • 遍历每一行,生成表格的每一行数据。
    • 使用 write! 宏构建HTML字符串。
  4. 输出 HTML 表格 最后,在println!函数中需要标明每个块以包含EVCXR BEGIN CONTENT的一行开始,然后是mime类型,然后是换行符,然后内容以包含EVCXR END CONTENT的一行结束。生成的HTML表格字符串被输出。Jupyter Notebook会自动渲染HTML字符串,从而显示漂亮的表格。

结果呈现