def marshall_data_frame(data, proto_df): """Convert a pandas.DataFrame into a proto.DataFrame. Parameters ---------- data : pandas.DataFrame, numpy.ndarray, Iterable, dict, DataFrame, Styler, or None Something that is or can be converted to a dataframe. proto_df : proto.DataFrame Output. The protobuf for a Streamlit DataFrame proto. """ df = type_util.convert_anything_to_df(data) # Convert df into an iterable of columns (each of type Series). df_data = (df.iloc[:, col] for col in range(len(df.columns))) import numpy as np import pandas as pd _marshall_table(df_data, proto_df.data) _marshall_index(df.columns, proto_df.columns) _marshall_index(df.index, proto_df.index) styler = data if type_util.is_pandas_styler(data) else None _marshall_styles(proto_df.style, df, styler)
def marshall(proto: ArrowProto, data: Data, default_uuid: Optional[str] = None) -> None: """Marshall pandas.DataFrame into an Arrow proto. Parameters ---------- proto : proto.Arrow Output. The protobuf for Streamlit Arrow proto. data : pandas.DataFrame, pandas.Styler, pyarrow.Table, numpy.ndarray, Iterable, dict, or None Something that is or can be converted to a dataframe. default_uuid : Optional[str] If pandas.Styler UUID is not provided, this value will be used. This attribute is optional and only used for pandas.Styler, other elements (e.g. charts) can ignore it. """ if type_util.is_pandas_styler(data): # default_uuid is a string only if the data is a `Styler`, # and `None` otherwise. assert isinstance( default_uuid, str ), "Default UUID must be a string for Styler data." _marshall_styler(proto, data, default_uuid) if isinstance(data, pa.Table): proto.data = type_util.pyarrow_table_to_bytes(data) else: df = type_util.convert_anything_to_df(data) proto.data = type_util.data_frame_to_bytes(df)
def marshall_data_frame(data, proto_df): """Convert a pandas.DataFrame into a proto.DataFrame. Parameters ---------- data : pandas.DataFrame, numpy.ndarray, Iterable, dict, DataFrame, Styler, or None Something that is or can be converted to a dataframe. proto_df : proto.DataFrame Output. The protobuf for a Streamlit DataFrame proto. """ if isinstance(data, pa.Table): raise errors.StreamlitAPIException(""" pyarrow tables are not supported by Streamlit's legacy DataFrame serialization (i.e. with `config.dataFrameSerialization = "legacy"`). To be able to use pyarrow tables, please enable pyarrow by changing the config setting, `config.dataFrameSerialization = "arrow"` """) df = type_util.convert_anything_to_df(data) # Convert df into an iterable of columns (each of type Series). df_data = (df.iloc[:, col] for col in range(len(df.columns))) _marshall_table(df_data, proto_df.data) _marshall_index(df.columns, proto_df.columns) _marshall_index(df.index, proto_df.index) styler = data if type_util.is_pandas_styler(data) else None _marshall_styles(proto_df.style, df, styler)
def marshall(proto, data, default_uuid=None): """Marshall data into an ArrowTable proto. Parameters ---------- proto : proto.ArrowTable Output. The protobuf for a Streamlit ArrowTable proto. data : pandas.DataFrame, pandas.Styler, numpy.ndarray, Iterable, dict, or None Something that is or can be converted to a dataframe. """ if type_util.is_pandas_styler(data): _marshall_styler(proto, data, default_uuid) df = type_util.convert_anything_to_df(data) _marshall_index(proto, df.index) _marshall_columns(proto, df.columns) _marshall_data(proto, df.to_numpy())