在熊猫数据框中完全打印超长字符串

我正在努力做一件看起来很简单的事情,我有一个包含很长字符串的熊猫数据框。

df = pd.DataFrame({'one' : ['one', 'two',
'This is very long string very long string very long string veryvery long string']})

现在,当我尝试打印相同的字符串时,我看不到完整的字符串,而只看到字符串的一部分。

我尝试了下面的选择

  • 使用 print(df.iloc[2])
  • 使用 to_html
  • 使用 to_string
  • Stack Overflow 的一个答案建议使用“熊猫”显示选项来增加列宽,但这个选项也不起作用。
  • 我也不知道 set_printoptions是如何解决这个问题的。
217817 次浏览

这就是你想做的吗?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})


In [8]: x
Out[8]:
one
0                                                one
1                                                two
2  This is very long string very long string very...


In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

您可以使用 options.display.max_colwidth来指定希望在默认表示中看到更多内容:

In [2]: df
Out[2]:
one
0                                                one
1                                                two
2  This is very long string very long string very...


In [3]: pd.options.display.max_colwidth
Out[3]: 50


In [4]: pd.options.display.max_colwidth = 100


In [5]: df
Out[5]:
one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

实际上,如果你只想检查一个值,通过访问它(作为一个标量,而不是像 df.iloc[2]那样作为一行) ,你也可以看到完整的字符串:

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

我经常处理您描述的情况的方法是使用 .to_csv()方法并写到 stdout:

import sys


df.to_csv(sys.stdout)

更新: 现在应该可以只使用 None而不是 sys.stdout具有类似的效果!

这将转储整个数据框架,包括任何字符串的全部。您可以使用 to _ csv 参数来配置列分隔符、是否打印索引等。不过,它不如正确地呈现它来得漂亮。

我最初是在 输出熊猫数据框中所有列的数据上回答与此相关的问题时发布的这篇文章

另一种非常简单的方法是调用 list 函数:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

不值得一提的是,列出整个列并不好,但是对于一个简单的行来说——为什么不呢

另一种打印整个字符串的简单方法是在数据帧上调用 values

df = pd.DataFrame({'one' : ['one', 'two',
'This is very long string very long string very long string veryvery long string']})


print(df.values)

输出将是

[['one']
['two']
['This is very long string very long string very long string veryvery long string']]

使用 pd.set_option('display.max_colwidth', None)自动分行和多行细胞。

这个 是一个伟大的资源如何使用木星显示熊猫最充分。


编辑: 以前是 pd.set_option('display.max_colwidth', -1)

在打印之前,只需将以下行添加到代码中。

 pd.options.display.max_colwidth = 90  # set a value as your need

您可以简单地执行以下步骤来设置其他选项,

  • 您可以按照以下方式更改熊猫 max _ column 特性的选项,以显示更多的列

    import pandas as pd
    pd.options.display.max_columns = 10
    

    (这允许显示10列,您可以根据需要更改它)

  • 像这样,您可以更改行数,因为您需要按如下方式显示以显示更多行

    pd.options.display.max_rows = 999
    

    (这允许一次打印999行)

应该没问题

请参考 医生更改更多大熊猫的选项/设置

我已经创建了一个小工具函数,这对我来说很好

def display_text_max_col_width(df, width):
with pd.option_context('display.max_colwidth', width):
print(df)


display_text_max_col_width(train_df["Description"], 800)

我可以改变长度的宽度根据我的要求,没有设置任何选项永久。

如果您使用的是 Jupyter 笔记本,您也可以打印熊猫数据框作为 HTML 表,这将打印全部字符串。

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

输出

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string