Outputting Pandas dataframe as table in Dash breaks for booleans, dicts

I am trying to print a dataframe as a table in Dash. Following the tutorial, I implemented this in a callback function that outputs an HTML component. However, I found that if my dataframe contains booleans (True/False), and sometimes dictionaries, it breaks the table and plot output for the entire app. I don’t see any errors in the console log, the other plots and tables that were previously displaying fine just stop working. Here is an example of the callback function I am using:

@app.callback(
    Output(component_id = 'stats-table', component_property = 'children'),
    [Input(component_id = 'selection', component_property = 'value')]
)
def df_table(input_value):
    max_rows = 10
    df1 = pd.DataFrame([True], index=[0], columns=['A']) # breaks all plot and table output
    df2 = pd.DataFrame([{'id': 'value'}], index=[0], columns=['A']) # cant see row
    df3 = pd.DataFrame([1], index=[0], columns=['A']) # this works fine
    return(
    html.Table(
    # Header
    [html.Tr([html.Th(col) for col in df1.columns])] +

    # Body
    [html.Tr([
        html.Td(df1.iloc[i][col]) for col in df1.columns
    ]) for i in range(min(len(df1), max_rows))]
    )
    )