为了在Jupyter Notebook中使用Rust和Polars库以类似于Pandas的方式输出HTML表格,我们可以使用 evcxr_jupyter 内核和HTML格式化。虽然Rust没有直接提供像Pandas那样的内置HTML表格输出,但我们可以通过手动构建HTML表格并在Jupyter Notebook中显示来实现这一点。
以下是一个详细的指南和示例代码:
安装和设置
安装 Rust 和
evcxr_jupyter内核 首先,确保你已经安装了Rust,然后安装evcxr_jupyter。1
2cargo install evcxr_jupyter
evcxr_jupyter --install启动 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
解释代码
加载依赖项 在
Jupyter Notebook中,我们使用:dep命令来添加所需的依赖项:polars和serde_json。创建 DataFrame 函数
create_dataframe创建了一个简单的DataFrame,包含两个列:days和temp。生成 HTML 表格 函数
dataframe_to_html将DataFrame转换为HTML表格格式:- 获取
DataFrame的列并生成表头。 - 遍历每一行,生成表格的每一行数据。
- 使用
write!宏构建HTML字符串。
- 获取
输出 HTML 表格 最后,在
println!函数中需要标明每个块以包含EVCXR BEGIN CONTENT的一行开始,然后是mime类型,然后是换行符,然后内容以包含EVCXR END CONTENT的一行结束。生成的HTML表格字符串被输出。Jupyter Notebook会自动渲染HTML字符串,从而显示漂亮的表格。
结果呈现
