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

使用ipyaggrid自定义单元格渲染器遇序列化错误的解决求助

问题原因

你在columnDefs中直接传入了Python函数currency_renderer作为cellRenderer,但ipyaggrid需要将grid_options序列化为JSON格式传递给前端AG Grid组件,而Python函数属于不可序列化的对象,因此触发了TypeError。另外,AG Grid的cellRenderer本质是前端JavaScript逻辑,无法直接执行Python函数。

修复方案

推荐使用AG Grid的valueFormatter(更适合纯值格式化场景),将格式化逻辑写成可序列化的JavaScript函数字符串,替代Python函数。修改后的代码如下:

def create_aggrid(df):
    currency_columns = ['size', 'pnl', 'commission']
    column_defs = [
        {
            'headerName': column,
            'field': column,
            # 使用JS的valueFormatter实现货币格式化,支持JSON序列化
            'valueFormatter': 'params => "£" + parseFloat(params.value).toFixed(2)' 
            if column in currency_columns else None
        }
        for column in df.columns
    ]

    grid_options = {
        'columnDefs' : column_defs,
        'defaultColDef': {'sortable': True, 'filter': True, 'resizable': True},
    }

    ag_grid = grid.Grid(grid_data=df,
            export_mode="buttons",
            columns_fit='auto',
            grid_options=grid_options,
            theme='ag-theme-balham',
            keep_multiindex=False,
            center=True)
    
    return ag_grid

额外说明

  1. 若你确实需要自定义DOM渲染(而非仅格式化值),可以将cellRenderer写成完整的JavaScript函数字符串:
'cellRenderer': 'function(params) { return `<span style="color:green">£${parseFloat(params.value).toFixed(2)}</span>`; }'
  1. 原代码中defaultColDef里的'sortable': 'true'等布尔值不需要加引号,直接写True即可,JSON序列化时会自动转为正确的布尔类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:40:12