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

Python Shiny Express中@render.data_frame无法正常工作的问题求助

问题:Python Shiny Express中@render.data_frame函数未执行,DataGrid无法显示

我尝试用Python Shiny Express展示DataGrid,但@render.data_frame装饰的函数完全没执行(调试打印只有第一条输出),跟着YouTube教程操作但无效,代码如下:

from pathlib import Path
import pandas as pd
import calendar
import matplotlib.pyplot as plt
import numpy as np
from shiny import reactive
from shiny.express import render, input, ui

@reactive.calc
def dat():
    # Create a DataFrame directly
    data = {
        "order_date": [
            "2024-08-01 08:30:00",
            "2024-08-02 09:45:00",
            "2024-08-03 14:15:00",
            "2024-08-04 11:00:00",
            "2024-08-05 16:20:00"
        ],
        "sales": [250, 450, 300, 400, 550],
        "category": ["Electronics", "Furniture", "Electronics", "Furniture", "Electronics"]
    }
    df = pd.DataFrame(data)

    
    df["order_date"] = pd.to_datetime(df["order_date"])
    df["hour"] = df["order_date"].dt.hour
    df["month"] = df["order_date"].dt.month_name()

    return df

with ui.card():
    ui.card_header("Sample Sales Data")
    print("I AM HERE")
    
    @render.data_frame
    def sample_sales():
        print("I AM HERE2")
        df = dat()
        print(df)
        
        return render.DataGrid(df.head(5), filter=True)

排查方向与解决方案

1. 显式添加UI输出占位符

在Shiny Express中,仅用@render.data_frame装饰函数可能不足以触发渲染,需要显式添加ui.output_data_frame来关联UI和后端渲染逻辑。修改后的代码如下:

from pathlib import Path
import pandas as pd
import calendar
import matplotlib.pyplot as plt
import numpy as np
from shiny import reactive
from shiny.express import render, input, ui
from shiny.render import DataGrid  # 显式导入DataGrid组件

@reactive.calc
def dat():
    data = {
        "order_date": [
            "2024-08-01 08:30:00",
            "2024-08-02 09:45:00",
            "2024-08-03 14:15:00",
            "2024-08-04 11:00:00",
            "2024-08-05 16:20:00"
        ],
        "sales": [250, 450, 300, 400, 550],
        "category": ["Electronics", "Furniture", "Electronics", "Furniture", "Electronics"]
    }
    df = pd.DataFrame(data)
    df["order_date"] = pd.to_datetime(df["order_date"])
    df["hour"] = df["order_date"].dt.hour
    df["month"] = df["order_date"].dt.month_name()
    return df

with ui.card():
    ui.card_header("Sample Sales Data")
    print("I AM HERE")
    
    # 添加输出占位符,与渲染函数名一致
    ui.output_data_frame("sample_sales")
    
    @render.data_frame
    def sample_sales():
        print("I AM HERE2")
        df = dat()
        print(df)
        return DataGrid(df.head(5), filter=True)

2. 升级Shiny到最新版本

不同版本的Shiny Express在DataFrame渲染的语法上可能存在差异,执行以下命令升级:

pip install --upgrade shiny

3. 验证组件导入是否正确

确保DataGrid从shiny.render显式导入,避免版本兼容问题。旧版本中可能需要从shiny.express.render导入,但最新版统一在shiny.render下。

4. 测试替代组件

如果问题仍存在,尝试用DataTable代替DataGrid进行测试,判断是组件本身的问题还是渲染逻辑的问题:

from shiny.render import DataTable

# 在渲染函数中替换
return DataTable(df.head(5), filter=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:22:16