Open
Description
Currently dcc.send_data_frame only supports pandas-style writers. I was wondering if polars support can be added as well. Previously, I used to do all my operations in polars and then on the final step when I need to download the dataframe I converted it to pandas to utilize the dcc.send_data_frame function. However, now im using my solution below. I am wondering if we can add a feature to support both pandas and polars via the send_data_frame function
Workaround solution to use polars to send dataframe:
import polars as pl
from dash import Dash, html, dcc, callback, Output, Input
import io
import base64
def polars_to_send_data_frame(df: pl.DataFrame, filename: str, **csv_kwargs):
buffer = io.StringIO()
df.write_csv(buffer, **csv_kwargs)
return {
'content': base64.b64encode(buffer.getvalue().encode('utf-8')).decode('utf-8'),
'filename': filename,
'type': 'text/csv',
'base64': True
}
app = Dash(__name__)
# Sample data
df = pl.DataFrame({
'A': range(5),
'B': ['foo', 'bar', 'baz', 'qux', 'quux'],
'C': [1.1, 2.2, 3.3, 4.4, 5.5]
})
app.layout = html.Div([
html.Button("Download CSV", id="btn"),
dcc.Download(id="download")
])
@callback(
Output("download", "data"),
Input("btn", "n_clicks"),
prevent_initial_call=True
)
def download_csv(n_clicks):
return polars_to_send_data_frame(df, "data.csv")
if __name__ == '__main__':
app.run(debug=True)
I would love to contribute and make a pr to add polars support!