【问题标题】:How can I display full (non-truncated) dataframe information in HTML when converting from Pandas dataframe to HTML?从 Pandas 数据框转换为 HTML 时,如何在 HTML 中显示完整(非截断)数据框信息?
【发布时间】:2014-10-10 16:44:05
【问题描述】:

我使用 DataFrame.to_html 函数将 Pandas 数据帧转换为 HTML 输出。当我将其保存到单独的 HTML 文件时,该文件会显示截断的输出。

例如,在我的 TEXT 列中,

df.head(1) 将显示

这部电影非常出色......

而不是

这部电影很好地解构了这一时期盛行的复杂社会情绪。

对于大型 Pandas 数据框的屏幕友好格式,此再现效果很好,但我需要一个 HTML 文件,该文件将显示数据框中包含的完整表格数据,即显示后一个文本元素的内容而不是之前的文字sn-p。

如何在 HTML 版本的信息中为我的 TEXT 列中的每个元素显示完整的、未截断的文本数据?我想 HTML 表格必须显示长单元格才能显示完整的数据,但据我了解,只有列宽参数可以传递给 DataFrame.to_html 函数。

【问题讨论】:

标签: python html pandas


【解决方案1】:

display.max_colwidth 选项设置为None(或1.0 版之前的-1):

pd.set_option('display.max_colwidth', None)

set_option documentation

例如,在IPython 中,我们看到信息被截断为 50 个字符。任何多余的部分都被省略了:

如果你设置display.max_colwidth选项,信息会完整显示:

【讨论】:

  • 根据文档,您应该将其设置为 None 以表示无限制。
  • 这就是我要说的!
  • max_columns 答案对我有用,它使用None 作为set_option 的第二个参数。
  • 如果您希望这些显示选项只应用一次,而不是永久应用,您也可以使用上下文管理器:with pd.option_context('display.max_colwidth', -1): display(df)
  • 使用 API v3,当我将 display.max_colwidth 设置为 -1 时,我得到了 FutureWarning。用None 替换-1 有效,并消除了警告。
【解决方案2】:
pd.set_option('display.max_columns', None)  

id(第二个参数)可以完全显示列。

【讨论】:

  • 除此之外,我的列数被截断了,如表格中间附近的省略号 (...) 所示。谢谢!
  • 这对我有用,而不是其他答案。我正在使用 Python 3.6
  • 这在 Python 2.7 上对我不起作用,但 @behzad.nouri 的第一个回答确实如此。
  • 这应该是公认的答案。当前带有选项max_colwidth 的接受答案可以解决字段值过长导致的截断问题。但是,我认为大多数人的截断问题实际上是列太多。所以,这个max_columns 应该是被接受的。
  • @Christopher,OP 询问了一列的宽度,很多人都来这里,所以 Karl 的回答对他们来说更相关。
【解决方案3】:

pd.set_option('display.max_columns', None) 设置显示的最大列数,而选项pd.set_option('display.max_colwidth', -1) 设置每个字段的最大宽度。

出于我的目的,我编写了一个小辅助函数来完全打印大量数据帧,而不会影响其余代码。它还重新格式化浮点数并设置虚拟显示宽度。您可以将它用于您的用例。

def print_full(x):
    pd.set_option('display.max_rows', None)
    pd.set_option('display.max_columns', None)
    pd.set_option('display.width', 2000)
    pd.set_option('display.float_format', '{:20,.2f}'.format)
    pd.set_option('display.max_colwidth', None)
    print(x)
    pd.reset_option('display.max_rows')
    pd.reset_option('display.max_columns')
    pd.reset_option('display.width')
    pd.reset_option('display.float_format')
    pd.reset_option('display.max_colwidth')

【讨论】:

  • 在 print(x) 上方的行中将 -1 更改为“None”以避免弃用警告
  • 我相信这应该是公认的答案,因为它也适用于浮点数。
  • display.width 是这里缺少的成分。谢谢。
  • 使用上下文管理器可以减少打字:with pd.option_context(...): display(x)
【解决方案4】:

Jupyter 用户

每当我只需要一个单元格时,我都会使用这个:

with pd.option_context('display.max_colwidth', None):
  display(df)

【讨论】:

  • 这是最常见的用例和最简洁的数据表示方式。否则,到处启用它会很混乱
  • 添加到@Adib 的评论中:将其全局更改为None 也可能导致笔记本出现性能问题。
【解决方案5】:

也试试这个:

pd.set_option("max_columns", None) # show all cols
pd.set_option('max_colwidth', None) # show full width of showing cols
pd.set_option("expand_frame_repr", False) # print cols side by side as it's supposed to be

【讨论】:

    【解决方案6】:

    以下代码导致以下错误:

    pd.set_option('display.max_colwidth', -1)
    

    FutureWarning:传递负整数在 1.0 版中已弃用,未来版本将不再支持。相反,使用 None 来不限制列宽。

    改为:

    pd.set_option('display.max_colwidth', None)
    

    这完成了任务并符合 1.0 版之后的 Pandas 版本。

    【讨论】:

      【解决方案7】:

      对于那些希望在 Dask 中执行此操作的人:

      我在 Dask 中找不到类似的选项,但如果我只是在同一个笔记本中为 Pandas 执行此操作,它也适用于 Dask。

      import pandas as pd
      import dask.dataframe as dd
      pd.set_option('display.max_colwidth', -1) # This will set the no truncate for Pandas as well as for Dask. I am not sure how it does for Dask though, but it works.
      
      train_data = dd.read_csv('./data/train.csv')
      train_data.head(5)
      

      【讨论】:

        【解决方案8】:

        查看 Pandas 数据框中单元格完整内容的另一种方法是使用 IPython 的显示函数:

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

        【讨论】:

          【解决方案9】:

          对于那些喜欢减少打字的人(即所有人!):pd.set_option('max_colwidth', None) 做同样的事情

          【讨论】:

            猜你喜欢
            • 2013-04-07
            • 2019-07-11
            • 1970-01-01
            • 2020-10-17
            相关资源
            最近更新 更多