You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Python Polars生成的HTML文本输出中的双引号?

解决Polars生成HTML时字符串列带双引号的问题

问题说明

在Flask应用中将DataFrame处理从Pandas迁移到Polars后,使用_repr_html_()生成的HTML输出中,Text列的字符串值被自动包裹双引号,但控制台执行print(df)时无引号。尝试调整Polars配置参数、修改数据字典、用CSS隐藏引号均无效,目前通过字符串替换临时解决,需要更优雅的方案。

原代码(存在两处关键误用):

import polars as pl
import pandas as pd

data = { 
    'Text': ['Virginia Woolf, Mrs. Dalloway', 'College website corpus', 'Presidential inaugural speeches', 'Federalist Papers', 'British Novels', 'YOUR TEXT'], 
    'To Be Frequency': [28.3, 16.7, 31.8, 39.8, 31.4, results[1]] 
}
df = pd.from_dict(data)  # 错误:此处应使用pl.from_dict生成Polars DataFrame

# 错误:误用pd.Config,实际需修改Polars的配置,应使用pl.Config
pd.Config.set_tbl_hide_column_data_types(True)
pd.Config.set_tbl_hide_dataframe_shape(True)
pd.Config.set_fmt_str_lengths(40)
pd.Config.set_tbl_width_chars(200)

textresult = df.sort('To Be Frequency')._repr_html_()

优雅解决方案

1. 先修正代码中的基础误用

  • 将pd.from_dict(data)改为pl.from_dict(data),确保生成的是Polars DataFrame,而非Pandas的。
  • 将pd.Config替换为pl.Config,否则所有Polars的渲染配置不会生效。

2. 用to_html()替代_repr_html_()并自定义格式化

_repr_html_()是Polars为交互式环境(如Jupyter)设计的默认渲染逻辑,会给字符串列添加引号;而to_html()提供了formatters参数,可自定义每列的输出方式,直接去掉字符串的引号:

import polars as pl

data = { 
    'Text': ['Virginia Woolf, Mrs. Dalloway', 'College website corpus', 'Presidential inaugural speeches', 'Federalist Papers', 'British Novels', 'YOUR TEXT'], 
    'To Be Frequency': [28.3, 16.7, 31.8, 39.8, 31.4, results[1]] 
}
df = pl.from_dict(data)

# 配置Polars的HTML渲染参数
pl.Config.set_tbl_hide_column_data_types(True)
pl.Config.set_tbl_hide_dataframe_shape(True)
pl.Config.set_fmt_str_lengths(40)
pl.Config.set_tbl_width_chars(200)

# 自定义Text列的格式化:直接返回原字符串,不添加引号
def format_text(value):
    return value

# 生成HTML时指定Text列的格式化函数
textresult = df.sort('To Be Frequency').to_html(
    formatters={'Text': format_text}
)

3. 进阶:手动生成自定义HTML表格

如果需要完全控制HTML结构(比如适配Flask模板的CSS样式),可以手动遍历Polars DataFrame生成表格:

def polars_to_flask_table(df):
    # 构建表头
    header = "<tr>" + "".join([f"<th>{col}</th>" for col in df.columns]) + "</tr>"
    # 构建表体行
    body_rows = []
    for row in df.iter_rows(named=True):
        row_cells = []
        for col, val in row.items():
            # Text列直接输出原始值,数值列保留格式
            cell_val = val if col == "Text" else str(val)
            row_cells.append(f"<td>{cell_val}</td>")
        body_rows.append("<tr>" + "".join(row_cells) + "</tr>")
    # 拼接完整表格HTML,可添加自定义类名
    return f"<table class='flask-table'>{header}{''.join(body_rows)}</table>"

# 使用自定义函数生成适配Flask的HTML
textresult = polars_to_flask_table(df.sort('To Be Frequency'))

内容的提问来源于stack exchange,提问作者SummittDweller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 04:15:39