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 [ ]: