python - 如何在终端中打印 df 而不丢失格式?

标签 python shell pandas printing dataframe

如何在不丢失格式的情况下在终端中打印 df?

假设我有一个这样的 df:

In: df
Out:

    TFs No Esenciales  Genes regulados  Genes Regulados Positivamente  Genes Regulados Negativamente  No Tentativo de genes a silenciar  No Real de genes a silenciar  No Tentativo de genes a inducir
146              YdeO               20                             18                              2                              2                               2                               0

但是当我使用 print 在 shell 中显示它时,它失去了它的格式
In: print (df)
Out:
        TFs No Esenciales  Genes regulados  Genes Regulados Positivamente  \
146              YdeO               20                             18   

     Genes Regulados Negativamente  No Tentativo de genes a silenciar  \
146                              2                                 2   

     No Real de genes a silenciar  No Tentativo de genes a inducir  \
146                            2                               0   

     No Real de genes a inducir  Balance de genes  Balance real de genes  
146                          0                 2                      2  

如何使用打印,但保留格式?

我想要的输出是:
In: print (df)
    Out:

    TFs No Esenciales  Genes regulados  Genes Regulados Positivamente  Genes Regulados Negativamente  No Tentativo de genes a silenciar  No Real de genes a silenciar  No Tentativo de genes a inducir
146              YdeO               20                             18                              2                              2                               2                               0

最佳答案

DOCUMENTATION

对于您可能会看到的格式的控制,有两件事正在发生。

  • 控制显示器可以处理的字符宽度。
  • 这是通过 pandas 选项 display.width 处理的并且可以通过 print pd.get_option('display.width') 看到.默认为 80 .
  • 第二个控件是数据框中要显示的列数。
  • 这是通过 pandas 选项 display.max_columns 处理的并且可以通过 print pd.get_option('display.max_columns') 看到.默认为 20 .
  • display.width
    让我们用一个示例数据框来探索它的作用
    import pandas as pd
    
    df = pd.DataFrame([range(40)], columns=['ABCDE%d' % i for i in range(40)])
    
    print df # this is with default 'display.width' of 80
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  \
    0       0       1       2       3       4       5       6       7       8   
    
       ABCDE9   ...     ABCDE30  ABCDE31  ABCDE32  ABCDE33  ABCDE34  ABCDE35  \
    0       9   ...          30       31       32       33       34       35   
    
       ABCDE36  ABCDE37  ABCDE38  ABCDE39  
    0       36       37       38       39  
    
    [1 rows x 40 columns]
    
    pd.set_option('display.width', 40)
    print df
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  \
    0       0       1       2       3   
    
       ABCDE4  ABCDE5  ABCDE6  ABCDE7  \
    0       4       5       6       7   
    
       ABCDE8  ABCDE9   ...     ABCDE30  \
    0       8       9   ...          30   
    
       ABCDE31  ABCDE32  ABCDE33  ABCDE34  \
    0       31       32       33       34   
    
       ABCDE35  ABCDE36  ABCDE37  ABCDE38  \
    0       35       36       37       38   
    
       ABCDE39  
    0       39  
    
    [1 rows x 40 columns]
    
    pd.set_option('display.width', 120)
    这应该向右滚动。
    print df
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  ABCDE9   ...     ABCDE30  ABCDE31  ABCDE32  \
    0       0       1       2       3       4       5       6       7       8       9   ...          30       31       32   
    
       ABCDE33  ABCDE34  ABCDE35  ABCDE36  ABCDE37  ABCDE38  ABCDE39  
    0       33       34       35       36       37       38       39  
    
    [1 rows x 40 columns]
    
    display.max_columns
    让我们把 'display.width'回到 80 与 pd.set_option('display.width,80)
    现在让我们探索 'display.max_columns' 的不同值
    print df # default 20
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  \
    0       0       1       2       3       4       5       6       7       8   
    
       ABCDE9   ...     ABCDE30  ABCDE31  ABCDE32  ABCDE33  ABCDE34  ABCDE35  \
    0       9   ...          30       31       32       33       34       35   
    
       ABCDE36  ABCDE37  ABCDE38  ABCDE39  
    0       36       37       38       39  
    
    [1 rows x 40 columns]
    

    注意中间的椭圆。这个数据框中有 40 列,为了达到 20 列的最大显示数,pandas 取了前 10 列 0:9和最后 10 列 30:39并在中间放一个椭圆。
    pd.set_option('display.max_columns', 30)
    print df
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  \
    0       0       1       2       3       4       5       6       7       8   
    
       ABCDE9  ABCDE10  ABCDE11  ABCDE12  ABCDE13  ABCDE14   ...     ABCDE25  \
    0       9       10       11       12       13       14   ...          25   
    
       ABCDE26  ABCDE27  ABCDE28  ABCDE29  ABCDE30  ABCDE31  ABCDE32  ABCDE33  \
    0       26       27       28       29       30       31       32       33   
    
       ABCDE34  ABCDE35  ABCDE36  ABCDE37  ABCDE38  ABCDE39  
    0       34       35       36       37       38       39  
    
    [1 rows x 40 columns]
    

    注意字符的宽度保持不变,但我有更多的列。 pandas 取了前 15 列 0:14和最后 15 列 26:39 .

    要显示所有列,您需要将此选项设置为至少与要显示的列数一样大。
    pd.set_option('display.max_columns', 40)
    print df
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  \
    0       0       1       2       3       4       5       6       7       8   
    
       ABCDE9  ABCDE10  ABCDE11  ABCDE12  ABCDE13  ABCDE14  ABCDE15  ABCDE16  \
    0       9       10       11       12       13       14       15       16   
    
       ABCDE17  ABCDE18  ABCDE19  ABCDE20  ABCDE21  ABCDE22  ABCDE23  ABCDE24  \
    0       17       18       19       20       21       22       23       24   
    
       ABCDE25  ABCDE26  ABCDE27  ABCDE28  ABCDE29  ABCDE30  ABCDE31  ABCDE32  \
    0       25       26       27       28       29       30       31       32   
    
       ABCDE33  ABCDE34  ABCDE35  ABCDE36  ABCDE37  ABCDE38  ABCDE39  
    0       33       34       35       36       37       38       39  
    

    没有省略号,显示所有列。

    将两个选项结合在一起

    在这一点上很简单。 pd.set_option('display.width', 1000)使用 1000 以允许较长的时间。 pd.set_option('display.max_columns', 1000)还允许宽数据帧。
    print df
    
       ABCDE0  ABCDE1  ABCDE2  ABCDE3  ABCDE4  ABCDE5  ABCDE6  ABCDE7  ABCDE8  ABCDE9  ABCDE10  ABCDE11  ABCDE12  ABCDE13  ABCDE14  ABCDE15  ABCDE16  ABCDE17  ABCDE18  ABCDE19  ABCDE20  ABCDE21  ABCDE22  ABCDE23  ABCDE24  ABCDE25  ABCDE26  ABCDE27  ABCDE28  ABCDE29  ABCDE30  ABCDE31  ABCDE32  ABCDE33  ABCDE34  ABCDE35  ABCDE36  ABCDE37  ABCDE38  ABCDE39
    0       0       1       2       3       4       5       6       7       8       9       10       11       12       13       14       15       16       17       18       19       20       21       22       23       24       25       26       27       28       29       30       31       32       33       34       35       36       37       38       39
    

    使用您的数据
    print df
    
       TFs    No  Esenciales  Genes  regulados  Genes.1  Regulados  Positivamente  Genes.2  Regulados.1  Negativamente  No.1  Tentativo  de  genes   a  silenciar  No.2  Real  de.1  genes.1  a.1  silenciar.1  No.3  Tentativo.1  de.2  genes.2  a.2  inducir
    0  146  YdeO          20     18          2        2          2              0      NaN          NaN            NaN   NaN        NaN NaN    NaN NaN        NaN   NaN   NaN   NaN      NaN  NaN          NaN   NaN          NaN   NaN      NaN  NaN      NaN
    

    大警告

    当你运行它时,你可能看不到你在这里做的滚动魔法。这是因为您的终端可能不会向右滚动。下面是 jupyter-notebook 的屏幕截图。它看起来不正确,因为文本正在被换行。但是,字符串中没有换行的新行,事实证明,当我将其复制并粘贴到堆栈溢出时,它会正确显示。

    enter image description here

    关于python - 如何在终端中打印 df 而不丢失格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38487945/

    相关文章:

    node.js - 在 Node.js(或 CMD)中运行 PHP 脚本?

    java - 我可以用 Python 编写浏览器插件吗?

    linux - 如何将参数传递给 erlang os :cmd()?

    java - jmeter 服务脚本。重启不工作

    python - 在 Pandas 中选择带有startswith的列

    python - 将数组添加到Python中的数据框

    python - Django "No Patterns"/循环导入错误

    python - 使用 Python pywinauto 自动化 acrobat

    python - 如何根据 Selenium、Python 和 Xpath 提供的 html 定位元素

    python 3 : remove overlaps in table