【问题标题】:Why does jupyter sometimes print a DataFrame formatted and sometimes as text?为什么 jupyter 有时会打印格式化的 DataFrame,有时会打印为文本?
【发布时间】:2023-03-07 04:43:01
【问题描述】:

我在 jupypter 笔记本中有以下代码:

# (1) How to add a new column?
test_csv['aggregator'] = None
print (test_csv)

# (2) How to remove a column?
test_csv.drop(columns=['platform'])

它打印以下内容:

为什么第二个语句是表格格式(没有print 语句),而第一个只是文本数据?有没有办法强制打印格式 DataFrame 并应用格式良好的表格?

【问题讨论】:

    标签: python pandas dataframe jupyter-notebook google-colaboratory


    【解决方案1】:

    test_csv.drop(columns=['platform']) 实际上并没有删除该列。它只是通过打印数据帧的状态向您显示数据帧的中间图片。

    要实际删除列:

    test_csv.drop(columns=['platform'], inplace=True)
    

    test_csv.drop('platform', axis=1, inplace=True)
    

    test_csv['aggregator'] = None 通过为其分配一个新列来更改数据框的状态。因此,它不会打印任何内容。

    【讨论】:

      【解决方案2】:

      为什么 jupyter 有时会打印格式化的 DataFrame,有时会打印为文本?

      如果你使用该函数 - print 它将把它打印为文本,因为 print 正在使用函数 to_string 来处理它获得的任何对象。

      当您将数据框“留在”单元格的和时,它会将其显示为表格,因为它是 Jupiter 的功能之一。

      函数test_csv.drop(columns=['platform']) 返回df 如果您希望它在数据帧中进行删除,则必须使用 inplace=Truedf=df.drop(col)... 然后打印数据帧

      【讨论】:

      • 我明白了。所以不管df 会在没有print() 声明的情况下“打印”吗?
      • 是的 - 有点,它会打印出来,但不使用打印功能。我认为它是唯一能做到这一点的 IDE,是什么让它在实验和课堂上流行
      • 谢谢。当您说 IDE 时,那是 ipython 核心的一部分,还是 jupyter 查看器的一部分?
      • 我不确定 Ipython——因为我没有在 jupyter notebook 中使用它——所以我说的是 jupyter notebook vs pycharm、spyder 等......
      【解决方案3】:

      我认为您在 Jupyter Notebook 的同一个单元格中运行这两个语句

      您可以在一个单元格中运行以下 sn-p

      # (1) How to add a new column?
      test_csv['aggregator'] = None
      test_csv # no need to use print
      

      在另一个单元格中

      # (2) How to remove a column?
      test_csv.drop(columns=['platform'])
      

      【讨论】:

        【解决方案4】:

        Ran Cohen 已经提到了 print 函数的“为什么”部分破坏了良好的格式。

        要获得格式良好(灰色和白色的表格格式)数据框,您可以将其留在单元格的末尾,但这仅适用于单个数据框。 如果想打印多个格式良好的数据帧,可以使用

        1)

        from IPython.display import display
        display(df1) #displays nicely formatted dataframe1
        display(df2) #displays nicely formatted dataframe2
        

        2)

        from IPython.core.interactiveshell import InteractiveShell
        InteractiveShell.ast_node_interactivity = "all"
        df1
        df2
        #displays both dataframes, nicely formatted
        

        注意:很好的格式是 Jupyter notebook 渲染(样式化和显示)数据框的 HTML 版本,与浏览器渲染 html 代码的方式相同。(这里虽然从 df1.to_html( ) 表格的样式less 在浏览器呈现时作为独立的 html 代码的样式是由 Jupyter Notebook 添加的一些额外样式)

        来源:

        1. Stackoverflow Article, same question,my answer attributed to the ones given there

        2. Found Solution Here First

        3. Stackoverflow Article, related to rendering

        【讨论】:

          猜你喜欢
          • 2012-02-27
          • 2022-08-17
          • 2019-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多