Is there a way by which I can freeze Pandas data frame header { as we do in excel}.So if its a long dataframe with multiple rows we can see the headers once we scroll down!! I am assuming ipython notebook
This function may do the trick:
from ipywidgets import interact, IntSlider from IPython.display import display def freeze_header(df, num_rows=30, num_columns=10, step_rows=1, step_columns=1): """ Freeze the headers (column and index names) of a Pandas DataFrame. A widget enables to slide through the rows and columns. Parameters ---------- df : Pandas DataFrame DataFrame to display num_rows : int, optional Number of rows to display num_columns : int, optional Number of columns to display step_rows : int, optional Step in the rows step_columns : int, optional Step in the columns Returns ------- Displays the DataFrame with the widget """ @interact(last_row=IntSlider(min=min(num_rows, df.shape[0]), max=df.shape[0], step=step_rows, description='rows', readout=False, disabled=False, continuous_update=True, orientation='horizontal', slider_color='purple'), last_column=IntSlider(min=min(num_columns, df.shape[1]), max=df.shape[1], step=step_columns, description='columns', readout=False, disabled=False, continuous_update=True, orientation='horizontal', slider_color='purple')) def _freeze_header(last_row, last_column): display(df.iloc[max(0, last_row-num_rows):last_row, max(0, last_column-num_columns):last_column])
Test it with:
import pandas as pd df = pd.DataFrame(pd.np.random.RandomState(seed=0).randint(low=0, high=100, size=[200, 50])) freeze_header(df=df, num_rows=10)
It results in (the colors were customized in the ~/.jupyter/custom/custom.css
file):
Old question but wanted to revisit it because I recently found a solution. Use the qgrid module: https://github.com/quantopian/qgrid
This will not only allow you to scroll with the headers frozen but also sort, filter, edit inline and some other stuff. Very helpful.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With