Python API for Table Display

In addition to APIs for creating and formatting BeakerX's interactive table widget, the Python runtime configures pandas to display tables with the interactive widget instead of static HTML.


In [ ]:
import pandas as pd
from beakerx import *

In [ ]:
pd.read_csv('../resources/data/interest-rates.csv')

In [ ]:
table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv'))
table.setAlignmentProviderForColumn('m3', TableDisplayAlignmentProvider.CENTER_ALIGNMENT)
table.setRendererForColumn("y10", TableDisplayCellRenderer.getDataBarsRenderer(False))
table.setRendererForType(ColumnType.Double, TableDisplayCellRenderer.getDataBarsRenderer(True))
table

In [ ]:
df = pd.read_csv('../resources/data/interest-rates.csv')
df['time'] = df['time'].str.slice(0,19).astype('datetime64[ns]')
table = TableDisplay(df)
table.setStringFormatForTimes(TimeUnit.DAYS)
table.setStringFormatForType(ColumnType.Double, TableDisplayStringFormat.getDecimalFormat(4,6))
table.setStringFormatForColumn("m3", TableDisplayStringFormat.getDecimalFormat(0, 0))

table

In [ ]:
table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv'))
table
#freeze a column
table.setColumnFrozen("y1", True)
#freeze a column to the right
table.setColumnFrozenRight("y10", True)
#hide a column
table.setColumnVisible("y30", False)

table.setColumnOrder(["m3", "y1", "y5", "time", "y2"])

table

In [ ]:
table = TableDisplay(pd.read_csv('../resources/data/interest-rates.csv'))
table.addCellHighlighter(TableDisplayCellHighlighter.getHeatmapHighlighter("m3", TableDisplayCellHighlighter.FULL_ROW))

table

Display mode: Pandas default


In [ ]:
beakerx.pandas_display_default()
pd.read_csv('../resources/data/interest-rates.csv')

Display mode: TableDisplay Widget


In [ ]:
beakerx.pandas_display_table()
pd.read_csv('../resources/data/interest-rates.csv')

Recognized Formats


In [ ]:
TableDisplay([{'y1':4, 'm3':2, 'z2':1}, {'m3':4, 'z2':2}])

In [ ]:
TableDisplay({"x" : 1, "y" : 2})

In [ ]:
mapList4 = [
   {"a":1, "b":2, "c":3},
   {"a":4, "b":5, "c":6},
   {"a":7, "b":8, "c":5}
]
display = TableDisplay(mapList4)

#set what happens on a double click
display.setDoubleClickAction(lambda row, column, tabledisplay:  tabledisplay.values[row].__setitem__(column, sum(tabledisplay.values[row])))

#add a context menu item
display.addContextMenuItem("negate", lambda row, column, tabledisplay:  tabledisplay.values[row].__setitem__(column, -1 * tabledisplay.values[row][column]))

display

In [ ]:
mapList4 = [
   {"a":1, "b":2, "c":3},
   {"a":4, "b":5, "c":6},
   {"a":7, "b":8, "c":5}
]
display = TableDisplay(mapList4)

#set what happens on a double click
display.setDoubleClickAction("runDoubleClick")

display

In [ ]:
print("runDoubleClick fired")

Set index to DataFrame


In [ ]:
df = pd.read_csv('../resources/data/interest-rates.csv')
df.set_index(['m3'])

In [ ]:
df = pd.read_csv('../resources/data/interest-rates.csv')
df.index = df['time']
df

Update cell


In [ ]:
dataToUpdate = [
   {'a':1, 'b':2, 'c':3},
   {'a':4, 'b':5, 'c':6},
   {'a':7, 'b':8, 'c':9}
]
tableToUpdate = TableDisplay(dataToUpdate)

tableToUpdate

In [ ]:
tableToUpdate.values[0][0] = 99
tableToUpdate.sendModel()

In [ ]:
tableToUpdate.updateCell(2,"c",121)
tableToUpdate.sendModel()

In [ ]: