【问题标题】:Is there a pandas function to display the first/last n columns, as in .head() & .tail()?是否有一个 pandas 函数来显示第一个/最后 n 列,如 .head() 和 .tail()?
【发布时间】:2015-08-16 23:13:09
【问题描述】:

我喜欢在 pandas 中使用 .head().tail() 函数来间接显示一定数量的行(有时我想要更少,有时我想要更多!)。但是有没有办法用 DataFrame 的列做到这一点?

是的,我知道我可以更改显示选项,如下所示: pd.set_option('display.max_columns', 20)

但这太笨重了,不能随时更改,而且无论如何,它只会替换 .head() 功能,而不是 .tail() 功能。

我也知道这可以使用访问器来完成: yourDF.iloc[:,:20] 模拟 .head(20) 和 yourDF.iloc[:,-20:] 模拟 .tail(20)。

它可能看起来像一小段代码,但老实说,它不像我使用 .head() 时那样直观和快捷。

这样的命令存在吗?没找到!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    不,这些方法不是 Pandas 提供的,但是自己制作这些方法很容易:

    import pandas as pd
    def front(self, n):
        return self.iloc[:, :n]
    
    def back(self, n):
        return self.iloc[:, -n:]
    
    pd.DataFrame.front = front
    pd.DataFrame.back = back
    
    df = pd.DataFrame(np.random.randint(10, size=(4,10)))
    

    所以现在 all DataFrame 将拥有这些方法:

    In [272]: df.front(4)
    Out[272]: 
       0  1  2  3
    0  2  5  2  8
    1  9  9  1  3
    2  7  0  7  4
    3  8  3  9  2
    
    In [273]: df.back(3)
    Out[273]: 
       7  8  9
    0  3  2  7
    1  9  9  4
    2  5  7  1
    3  3  2  5
    
    In [274]: df.front(4).back(2)
    Out[274]: 
       2  3
    0  2  8
    1  1  3
    2  7  4
    3  9  2
    

    如果您将代码放在实用程序模块中,例如 utils_pandas.py,那么您可以使用 import 语句激活它:

    import utils_pandas
    

    【讨论】:

    • 不错!谢谢,@unutbu!我对 python 和 pandas 非常陌生(完全是编程!),所以我还没有完全了解 UDF。这将是一次很棒的第一次尝试。
    • 我尝试将带有函数定义的脚本放在我的 sys.path 中列出的文件夹中,打开一个新的(IPython)控制台,执行import pandas as pd,然后执行import utils_pandas,但我说: NameError: name 'pd' is not defined 知道为什么模块不能识别我的pd 别名吗?
    • 每个模块都有自己的“全局”命名空间。因此,将import pandas as pd 放在一个模块(或脚本或控制台)中不会在另一个模块中定义pd。所以一定要把import pandas as pd放在utils_pandas.py中。
    【解决方案2】:

    最接近的仿真,您可以将其放入函数中:

    number_of_columns = 5 # eg.
    head_cols = df[df.columns[:number_of_columns]]
    tail_cols = df[df.columns[-number_of_columns:]]
    

    【讨论】:

      【解决方案3】:

      转置它以使用 head 并返回

      df.T.head().T
      

      避免索引切片或自定义方法。

      【讨论】:

        【解决方案4】:

        你可以只使用 df.col.head(n) 来做你想做的事......见下面的例子,

        df = pd.DataFrame({'a': [i for i in range(101)],
                           'b': [i for i in range(101)]})
        df.a.head(4)
        
        Out[37]:
        0    0
        1    1
        2    2
        3    3
        Name: a, dtype: int64
        

        【讨论】:

        • 这不是我想要做的。 maxymoo 和 unutbu 的答案非常优雅地展示(和解决!)问题!
        【解决方案5】:

        您可以在括号内输入一个数字,该数字将显示 n 个第一个/最后一个数字 数据框中的行数。

        df.head(10)
        

        您甚至可以输入比默认值更低的数字(如果您也想的话)。

        df.head(2)
        

        【讨论】:

        • 用户不想要前 n 行,而是前 n 列。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多