【问题标题】:Is there a concise way to show all rows in pandas for just the current command?是否有一种简洁的方法可以仅针对当前命令显示 pandas 中的所有行?
【发布时间】:2015-09-01 18:43:12
【问题描述】:

有时我想显示 pandas DataFrame 中的所有行,但只针对单个命令或代码块。

当然,我可以将“max_rows”显示选项设置为较大的数字,但之后我必须重复该命令才能恢复到我喜欢的设置。 (我个人喜欢最多 12 行)。

pd.options.display.max_rows=1000
myDF
pd.options.display.max_rows=12

这很烦人。

我在文档中读到,如果我将命令与“with”语句结合使用,我可以使用 pd.option_context() 函数来完成此操作:

with pd.option_context("display.max_rows", 1000): myDF

我无法让它工作,(不返回任何输出)。 但我认为这样的解决方案仍然对于日常的偶然使用来说太多了!

我希望有一些快速的 Python 方式来覆盖显示选项!
一个存在吗?我是否忽略了什么?

我喜欢如何通过向 .head() 函数传递 # of rows 的参数来更改 .head() 函数输出的行数,但它仍然必须低于“display.max_rows”设置...

我知道我可以始终将“display.max_rows”设置保持在很高的水平,然后在大多数情况下添加 .head(12) 函数,但我认为大多数人会同意那会有多烦人。

我确实知道,可以通过将 pandas Series 中的所有(或大部分?)值传递给诸如 list() 之类的核心函数来查看它。但这对于 DF 来说是棘手的。此外,如果不是表格格式,则很难阅读。

类似于the solution for my first question,我想可能有一种方法可以编写我自己的函数(放置在启动脚本中),但我不确定最好的编写方法。

【问题讨论】:

  • 我经常发现通过 df.to_clipboard() 使用 Excel 查看大型 DataFrame,然后粘贴到 excel 中更容易。根据数据框的复杂程度,可能需要使用 df.to_excel。
  • 我不同意@Alexander 的观点。当 DF 太大而无法在 Notebook 中查看时,通常是因为我没有想到正确的聚合。图表也可以提供帮助。
  • 好吧,我给了 N=1000 来表示相当大但不是大得离谱的东西,但也许我应该使用更像 100 的东西。我不一定要查看“所有”行,因为如果 N 很大,显然我不想这样做。但我经常想做的不仅仅是查看 12 行,以帮助我测试不同的命令。在许多情况下,我很乐意在 12 到 60 行之间快速跳转,但我也希望在 DF 不大的情况下查看所有行。
  • 有时这与适当的聚合无关,或者不可能这样做。这个问题主要是关于需要一些方便的方法来评估不同命令变体的结果(例如,评估聚合数据的不同尝试如何工作!!!)

标签: python pandas


【解决方案1】:

您可以编写一个显式调用display的函数

例如,考虑这个函数:

from IPython.display import display

def show_more(df, lines):
    foo = 1
    display(df)
    foo = 2

当我调用函数时(刚刚尝试过):

>> show_more(df, 1000)
... # <- Shows here the DF

然后它会显示数据框,即使foo = 2 行是在之后执行的。因此,您可以设置选项而不是foo = 1 行,并在foo = 2 行中取消设置。实际上,您可能只使用问题中的上下文管理器。

【讨论】:

  • 这似乎工作得很好!我会再玩一些,但它看起来很有希望!谢谢!!
  • 我昨天一整天都在用这个,它帮助很大。
  • 注意:我最终稍微调整了函数,以便在列上也能工作,以便在最后重置时能够适应不同的默认设置,并拥有自己的默认设置(因为当我传递它时没有参数)。另外,我从名称中删除了下划线,因为这会减慢打字速度。
  • def showmore(df, lines=None, cols=None): 如果行是无:行 = 50 如果 cols 是无:cols = 20 oldrows = pd.options.display.max_rows oldcols = pd .options.display.max_columns pd.options.display.max_rows=lines pd.options.display.max_columns=cols display(df) pd.options.display.max_rows=oldrows pd.options.display.max_columns=oldcols
  • aagh,抱歉,我是 S.O. 的新手,我只是在搞清楚,不确定将我的调整版解决方案放在哪里最好!似乎 cmets 不是最好的地方,因为我丢失了代码块格式。
【解决方案2】:

这不会显示任何内容,因为它不返回任何内容:

with pd.option_context("display.max_rows", 1000): myDF

with 块内调用display 应该可以工作:

with pd.option_context("display.max_rows", 1000):
    display(myDF)

【讨论】:

    【解决方案3】:

    这似乎在 pandas 0.22.0 中按预期工作(仅导入 pandas,没有 IPython):

    import pandas as pd    
    with pd.option_context("display.max_rows", 1000): myDF
    

    大概是因为默认行为是返回 myDF 的 repr。 IDE 很可能会覆盖这一点。

    如果输入太多,那么直接打印到终端也可以在包装在函数中时工作:

    from __future__ import print_statement  # for python2
    
    def show_rows(df, nrows=1000):
        with pd.option_context("display.max_rows", nrows): print(df)
    

    编辑:默认情况下,调用 show_rows(df) 会将数据帧 df 的前 1000 行打印到标准输出。

    【讨论】:

    • 这不会打印任何东西。
    • 你只需要调用函数 - 编辑显示如上。
    【解决方案4】:

    您可以使用以下辅助函数打印完整的数据帧,并在打印后将max_rows设置为正常。

    def print_full(df):
        import pandas as pd
        pd.set_option('display.max_rows', len(df))
        print(df)
        pd.reset_option('display.max_rows')
    

    【讨论】:

      【解决方案5】:

      单行强制显示所有行(在jupyter中):

      import IPython.display
      
      IPython.display.HTML(df.to_html())
      

      【讨论】:

      • 简单明了!
      【解决方案6】:

      df.show(number of records)

      例子:

      df=spark.read.format('csv').load('hdfs://localhost:9000/user/test/region_location', header='false', nullValue='null', schema=transchema)
      
      df.show(50)
      

      【讨论】:

      • 使用 Pandas 1.2.0:AttributeError: 'DataFrame' object has no attribute 'show'
      • 检查您的列并删除所有空格(如果有)。 df.columns
      • 不确定这有什么关系,即使any([c.isspace() for d in df.columns for c in d]) == False,DataFrame仍然没有属性show
      【解决方案7】:

      在结果数据框中显示所需行数的最佳方式:

      对于行:

      pd.set_option('display.max_rows',100)
      

      对于列:

      Use display.max_columns option
      pd.set_option('display.max_columns',100)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-05
        • 1970-01-01
        • 2013-08-06
        • 1970-01-01
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        相关资源
        最近更新 更多