Spaces:
Running
Running
import gradio as gr | |
import pandas as pd | |
import numpy as np | |
def update_dataframe(): | |
regular_df = pd.DataFrame(np.random.randint(1, 10, size=(5, 5)), columns=pd.Index([str(i) for i in range(5)])) | |
wide_df = pd.DataFrame([ | |
[5, 22, 91, 17, 73, 38, 84, 46, 65, 10, 155, 122, 11, 144, 133], | |
[81, 42, 13, 97, 33, 77, 59, 100, 29, 61, 213, 195, 142, 118, 127], | |
[37, 71, 63, 102, 28, 94, 19, 55, 88, 44, 116, 139, 122, 150, 147], | |
[104, 52, 49, 26, 83, 67, 31, 92, 79, 18, 241, 115, 159, 123, 137], | |
[16, 95, 74, 68, 43, 101, 27, 85, 39, 57, 129, 148, 132, 111, 156] | |
], columns=pd.Index([f"col_{i}" for i in range(15)])) | |
return regular_df, wide_df | |
def clear_dataframes(): | |
regular_empty_df = pd.DataFrame([], columns=pd.Index([str(i) for i in range(5)])) | |
wide_empty_df = pd.DataFrame([], columns=pd.Index([f"col_{i}" for i in range(15)])) | |
return regular_empty_df, wide_empty_df | |
def increment_select_counter(evt: gr.SelectData, count): | |
count_val = 1 if count is None else count + 1 | |
return count_val, evt.index, evt.value | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(scale=1): | |
initial_regular_df = pd.DataFrame(np.zeros((5, 5), dtype=int), columns=pd.Index([str(i) for i in range(5)])) | |
df = gr.Dataframe( | |
value=initial_regular_df, | |
interactive=True, | |
label="Interactive Dataframe", | |
show_label=True, | |
elem_id="dataframe", | |
show_search="filter", | |
show_copy_button=True, | |
show_row_numbers=True, | |
static_columns=[4] | |
) | |
with gr.Column(scale=1): | |
initial_wide_df = pd.DataFrame(np.zeros((5, 15), dtype=int), columns=pd.Index([f"col_{i}" for i in range(15)])) | |
df_view = gr.Dataframe( | |
value=initial_wide_df, | |
interactive=False, | |
label="Non-Interactive View (Scroll Horizontally)", | |
show_label=True, | |
show_search="search", | |
elem_id="non-interactive-dataframe", | |
show_copy_button=True, | |
show_row_numbers=True, | |
show_fullscreen_button=True, | |
) | |
tall_df_value = [ | |
["DeepSeek Coder", 79.3, True], | |
["Llama 3.3", 68.9, True], | |
["Qwen 2.5", 61.9, True], | |
["Gemma 2", 59.5, False], | |
["GPT 2", 18.3, False], | |
] | |
def get_display_value(values): | |
display_values = [] | |
medals = ["π₯", "π₯", "π₯"] | |
for i, row in enumerate(values): | |
if i < 3: | |
display_values.append([f"{medals[i]} {row[0]}", row[1]]) | |
else: | |
display_values.append([row[0], row[1]]) | |
return display_values | |
display_value = get_display_value(tall_df_value) | |
tall_df_value = { | |
"data": tall_df_value, | |
"headers": ["Model", "% Correct (LeetCode Hard)", "Is Open Source"], | |
"metadata": { | |
"display_value": display_value | |
} | |
} | |
with gr.Row(): | |
with gr.Column(): | |
df_tall = gr.Dataframe( | |
value=tall_df_value, | |
interactive=False, | |
label="Tall Dataframe (Scroll Vertically)", | |
datatype=["str", "number", "bool"], | |
max_height=200, | |
show_label=True, | |
elem_id="dataframe_tall", | |
show_copy_button=True, | |
show_row_numbers=True, | |
show_search="search", | |
) | |
df_tall_selected_cell_index = gr.Textbox( | |
label="Tall dataframe selected cell index", elem_id="tall_selected_cell_index" | |
) | |
df_tall_selected_cell_value = gr.Textbox( | |
label="Tall dataframe selected cell value", elem_id="tall_selected_cell_value" | |
) | |
with gr.Row(): | |
with gr.Column(): | |
update_btn = gr.Button("Update dataframe", elem_id="update_btn") | |
clear_btn = gr.Button("Clear dataframe", elem_id="clear_btn") | |
with gr.Row(): | |
change_events = gr.Number( | |
value=0, label="Change events", elem_id="change_events" | |
) | |
input_events = gr.Number(value=0, label="Input events", elem_id="input_events") | |
select_events = gr.Number( | |
value=0, label="Select events", elem_id="select_events" | |
) | |
with gr.Row(): | |
selected_cell_index = gr.Textbox( | |
label="Selected cell index", elem_id="selected_cell_index" | |
) | |
selected_cell_value = gr.Textbox( | |
label="Selected cell value", elem_id="selected_cell_value" | |
) | |
update_btn.click(fn=update_dataframe, outputs=[df, df_view]) | |
clear_btn.click(fn=clear_dataframes, outputs=[df, df_view, df_tall]) | |
df.change(fn=lambda x: x + 1, inputs=[change_events], outputs=[change_events]) | |
df.input(fn=lambda x: x + 1, inputs=[input_events], outputs=[input_events]) | |
df.select( | |
fn=increment_select_counter, | |
inputs=[select_events], | |
outputs=[select_events, selected_cell_index, selected_cell_value], | |
) | |
df_tall.select( | |
fn=increment_select_counter, | |
inputs=[select_events], | |
outputs=[select_events, df_tall_selected_cell_index, df_tall_selected_cell_value], | |
) | |
if __name__ == "__main__": | |
demo.launch() | |