Skip to content

dcc.send_data_frame polars support #3153

Open
@omarirfa

Description

@omarirfa

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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2considered for next cyclefeaturesomething new

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions