当从Pandas数据帧转换为HTML时,我如何在HTML中显示完整(非截断)的数据帧信息?

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

例如,在我的TEXT列中,

df.head(1)将显示

这部电影是一部出色的作品。

而不是

这部电影在解构这一时期盛行的复杂社会情绪方面做出了出色的努力。

这种表现在大量Pandas数据框架的屏幕友好格式的情况下是很好的,但我需要一个HTML文件,将显示包含在数据框架中的完整表格数据,也就是说,将显示后一个文本元素,而不是前一个文本片段。

如何能够在信息的HTML版本中显示text列中每个元素的完整的、未截断的文本数据?我可以想象HTML表必须显示长单元格来显示完整的数据,但据我所知,只有列宽参数可以传递到DataFrame.to_html函数。

504425 次浏览

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

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

set_option文档

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

Truncated result

如果你设置了display.max_colwidth选项,信息将全部显示:

Non-truncated result

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

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

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')

对于那些想在Dask这样做的人:

我在Dask中找不到类似的选项,但如果我只是在熊猫的同一笔记本中这样做,它也适用于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)

下面的代码会导致以下错误:

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

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

相反,使用:

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

这就完成了任务,并符合1.0版本之后的熊猫版本。

对于那些喜欢减少输入的人(即每个人!):pd.set_option('max_colwidth', None)做同样的事情

Jupyter用户

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

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

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

from IPython.display import HTML


HTML(df.to_html())

也试试这个:

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

显示特定单元格的完整数据框架:

import pandas as pd
with pd.option_context('display.max_colwidth', None,
'display.max_columns', None,
'display.max_rows', None):
display(df)

上面的方法可以扩展为更多的选项。

更新的助手函数从卡尔阿德勒:

def display_full(x):
with pd.option_context('display.max_rows', None,
'display.max_columns', None,
'display.width', 2000,
'display.float_format', '{:20,.2f}'.format,
'display.max_colwidth', None):
display(x)

更改所有单元格的显示选项:

pd.set_option('display.max_colwidth', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
display(df)