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

如何在NiceGUI中持续更新Pandas DataFrame?求CSV联动方案

解决NiceGUI中DataFrame表格同步更新与CSV文件监听问题

一、DataFrame更新后同步刷新表格

NiceGUI的ui.table默认不会自动感知Pandas DataFrame的内存变化,核心原因是初始渲染后组件无法追踪DataFrame的修改。正确做法是将表格数据绑定到响应式变量,通过更新响应式变量触发组件自动刷新。

代码示例:

from nicegui import ui, reactive
import pandas as pd
import time
from threading import Thread

# 初始化响应式数据:将DataFrame转为字典列表并用reactive包裹
df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
table_rows = reactive(df.to_dict('records'))
# 生成表格列配置
columns = [{'name': col, 'label': col, 'field': col} for col in df.columns]

# 创建表格并绑定响应式数据
table = ui.table(columns=columns, rows=table_rows)

# 模拟条件触发的DataFrame持续更新
def update_df_periodically():
    global df
    while True:
        # 模拟业务逻辑的DataFrame修改
        df['Age'] += 1
        # 更新响应式变量,自动触发表格刷新
        table_rows.value = df.to_dict('records')
        time.sleep(2)

# 启动后台更新线程
Thread(target=update_df_periodically, daemon=True).start()

ui.run()

关键说明:

  • 用reactive()包裹表格数据,让NiceGUI能追踪数据变化
  • 每次DataFrame更新后,将新数据转为字典列表并赋值给table_rows.value,无需手动调用table.update()
  • 若用按钮触发更新,只需在按钮回调内更新table_rows.value即可

二、监听CSV文件变化自动更新DataFrame

借助watchdog库监听CSV文件的修改事件,当文件内容变化时重新读取DataFrame并同步到表格。

代码示例:

from nicegui import ui, reactive
import pandas as pd
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

# 目标CSV文件路径
CSV_PATH = 'data.csv'

# 初始化数据:文件不存在则创建初始数据
try:
    df = pd.read_csv(CSV_PATH)
except FileNotFoundError:
    df = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
    df.to_csv(CSV_PATH, index=False)

table_rows = reactive(df.to_dict('records'))
columns = [{'name': col, 'label': col, 'field': col} for col in df.columns]
table = ui.table(columns=columns, rows=table_rows)

# 定义CSV文件监听处理器
class CSVHandler(FileSystemEventHandler):
    def on_modified(self, event):
        if event.src_path == CSV_PATH:
            # 短暂延迟避免读取未写入完成的文件
            time.sleep(0.1)
            global df
            df = pd.read_csv(CSV_PATH)
            table_rows.value = df.to_dict('records')

# 启动文件监听
event_handler = CSVHandler()
observer = Observer()
observer.schedule(event_handler, path='./', recursive=False)
observer.start()

# 程序退出时停止监听线程
ui.on_shutdown(lambda: observer.stop())

ui.run()

关键说明:

  • 先安装依赖:pip install watchdog
  • 通过FileSystemEventHandler的on_modified方法捕获文件修改事件,过滤目标CSV文件
  • 添加time.sleep(0.1)防止读取正在写入的不完整文件
  • 用ui.on_shutdown确保程序退出时停止监听线程,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:13:15