提问人:Paul 提问时间:11/15/2023 最后编辑:Paul 更新时间:11/16/2023 访问量:40
使用面板的制表器以交互方式子集和编辑数据帧
Interactively subset AND edit dataframes with panel's tabulator
问:
我想以交互方式编辑大型数据帧,同时以交互方式将子集子集设置为行批次。我正在 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
)
运行最后一个单元格为我提供了数据子集的交互式视图:
我可以在两个子集之间毫无问题地切换。但是,在第一次单元格编辑之后,无法再在两个数据集之间切换。
知道如何解决此问题,或者有任何解决方法的想法吗?归根结底,我想手动查看并可能重新标记数据批次。
答: 暂无答案
评论