使用面板的制表器以交互方式子集和编辑数据帧

Interactively subset AND edit dataframes with panel's tabulator

提问人:Paul 提问时间:11/15/2023 最后编辑:Paul 更新时间:11/16/2023 访问量:40

问:

我想以交互方式编辑大型数据帧,同时以交互方式将子集子集设置为行批次。我正在 jupyter 实验室笔记本中使用 Python 包面板及其 Tabulator 类进行尝试。到目前为止,没有成功。

我现在在哪里:

  • 教程涵盖了交互式编辑(没有交互式子集)并且工作正常。
  • 我还能够使用 panel.bind 方法和 Select 小部件以交互方式对表进行子集化。

但是,当我尝试将这两种交互组合在一起时,我失败了:单个交互式编辑会导致交互式子集功能中断。

下面是 jupyter 实验室笔记本内部的可重现示例:

(面板==1.3.1,熊猫==2.1.3)

import pandas as pd
import panel as pn
from bokeh.models.widgets.tables import SelectEditor

pn.extension('tabulator')
df = pd.DataFrame([
    ['a', 'Hello', 0, 'keep'],
    ['b', 'Hi', 0, 'keep'],
    ['c', 'World', 0, 'keep'],
    ['d', 'Planet', 1, 'keep'],
    ['e', 'Earth', 1, 'keep']
], columns=['id', 'name', 'predicted', 'decision'])

仅供参考:该列是聚类相似名称的结果。现在,我想手动查看结果,并在发现错误时重新标记。predict

# Create list of subsets of the data:
dfs = [df[df.predicted.eq(c)] for c in (0, 1)]

# Use the Select widget to switch between the subsets
select = pn.widgets.Select(name='Cluster #', value=0, options=list(range(len(dfs))))

# Create an interactive table, returning the subset based on the select widget:
def table_creator(cluster):
    return dfs[cluster]

interactive_table = pn.bind(table_creator, select)

# Use the interactive table as the data inside the Tabulator widget:
tabulator = pn.widgets.Tabulator(
    interactive_table, 
    editors={'decision': SelectEditor(options=['keep', 'exclude']),
             'id': None, 'name': None, 'predicted': None}
)

# Display Select and Tabulator widgets side by side:
pn.Column(
    select,
    tabulator
)

运行最后一个单元格为我提供了数据子集的交互式视图:

最后一个单元格的交互式输出图像

我可以在两个子集之间毫无问题地切换。但是,在第一次单元格编辑之后,无法再在两个数据集之间切换。

知道如何解决此问题,或者有任何解决方法的想法吗?归根结底,我想手动查看并可能重新标记数据批次。

python pandas jupyter-lab holoviz-panel

评论

0赞 nisakova 11/15/2023
嗨,哪一行是你的“第一个单元格”?
0赞 Paul 11/16/2023
@nisakova我总共有三个单元格,就像描述中总结的那样。第一个单元格包含 imports 和 pn.extension 语句。第二个单元格创建玩具数据集。第三个单元完成其余的工作。

答: 暂无答案