import datetime as dt import pandas as pd import panel as pn pn.extension() df = pd.DataFrame({ 'int': [1, 2, 3], 'float': [3.14, 6.28, 9.42], 'str': ['A', 'B', 'C'], 'bool': [True, False, True], 'date': [dt.date(2019, 1, 1), dt.date(2020, 1, 1), dt.date(2020, 1, 10)], 'datetime': [dt.datetime(2019, 1, 1, 10), dt.datetime(2020, 1, 1, 12), dt.datetime(2020, 1, 10, 13)] }, index=[1, 2, 3]) df_widget = pn.widgets.DataFrame(df, name='DataFrame') df_widget from bokeh.models.widgets.tables import SelectEditor, NumberFormatter editor = SelectEditor(options=['A', 'B', 'C', 'D']) formatter = NumberFormatter(format='0.00000') table = pn.widgets.DataFrame(df, editors={'str': editor}, formatters={'float': formatter}) table table.selection = [0, 2] table.selected_dataframe pn.widgets.DataFrame(df, autosize_mode='none', widths={'index': 50, 'int': 50, 'float': 50, 'str': 70, 'bool': 130}, width=350) pn.widgets.DataFrame(df, autosize_mode='fit_columns', width=300) pn.widgets.DataFrame(df, autosize_mode='fit_viewport') date_df = df.set_index('datetime').iloc[:5, :2] pn.widgets.DataFrame(date_df, height=400, widths=150, frozen_columns=1, autosize_mode='none') agg_df = pd.concat([date_df, date_df.median().to_frame('Median').T, date_df.mean().to_frame('Mean').T]) agg_df.index= agg_df.index.map(str) pn.widgets.DataFrame(agg_df, frozen_rows=-2, height=400) from bokeh.sampledata.population import data as population_data pop_df = population_data[population_data.Year == 2020].set_index(['Location', 'AgeGrp', 'Sex'])[['Value']] pn.widgets.DataFrame(value=pop_df, hierarchical=True, aggregators={'Sex': 'sum', 'AgeGrp': 'sum'}, height=400) import numpy as np stream_df = pd.DataFrame(np.random.randn(10, 5), columns=list('ABCDE')) stream_table = pn.widgets.DataFrame(stream_df, autosize_mode='fit_columns', width=450) stream_table def stream_data(): stream_df = pd.DataFrame(np.random.randn(10, 5), columns=list('ABCDE')) stream_table.stream(stream_df) pn.state.add_periodic_callback(stream_data, period=1000, count=5) patch_table = pn.widgets.DataFrame(df[['int', 'float', 'str', 'bool']]) patch_table patch_table.patch({ 'bool': [ (0, False), (2, False) ], 'int': [ (slice(0, 2), [3, 2]) ] }, as_index=False) pn.Row(df_widget.controls(jslink=True), df_widget)