pandas 冻结熊猫数据框中的标题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/28778668/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 22:59:46  来源:igfitidea点击:

Freeze header in pandas dataframe

python-2.7pandas

提问by sushmit

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

有没有一种方法可以让我冻结 Pandas 数据框标题 { 正如我们在 excel 中所做的那样}。所以如果它是一个多行的长数据框,我们可以在向下滚动时看到标题!!我假设 ipython 笔记本

回答by Guilherme Beltramini

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.cssfile): enter image description here

结果(颜色在~/.jupyter/custom/custom.css文件中自定义): 在此处输入图片说明

回答by Chris Decker

Old question but wanted to revisit it because I recently found a solution. Use the qgrid module: https://github.com/quantopian/qgrid

老问题,但想重新审视它,因为我最近找到了一个解决方案。使用 qgrid 模块: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.

这不仅可以让您在标题冻结的情况下滚动,还可以排序、过滤、编辑内联和其他一些内容。很有帮助。

回答by Blue Moon

A solution that would work on any editor is to select what rows you want to look at:

适用于任何编辑器的解决方案是选择要查看的行:

df.ix[100:110] # would show you from row 101 to 110 keeping the header on top