在 pandas 数据框中完全打印很长的字符串

Print very long string completely in pandas dataframe

我正在努力处理看似非常简单的 thing.I 有一个包含很长字符串的 pandas 数据框。

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

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

我尝试了以下选项

任何想法表示赞赏。看起来很简单,但是做不到!

这是你想做的吗?

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 参数来配置列分隔符,是否打印索引等。但是它会不如正确渲染它漂亮。

我最初发布这篇文章是为了回答 Output data from all columns in a dataframe in pandas

上的相关问题

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

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) 自动换行和多行单元格。

This 是关于如何充分利用 jupyters 显示 pandas 的重要资源。


已编辑: 曾经是 pd.set_option('display.max_colwidth', -1).

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

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

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

  • 您可以如下更改 pandas max_columns 功能的选项以显示更多列

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

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

  • 这样你可以根据需要改变行数显示如下显示更多行

    pd.options.display.max_rows = 999
    

    (这允许一次打印 999 行)

这应该没问题

请参考 doc 为 pandas

更改更多 options/settings

我创建了一个小的实用函数,这对我来说很有效

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 笔记本,您还可以将 pandas 数据帧打印为 HTML table,这将打印完整的字符串。

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