在pandas数据帧

时间:2015-04-27 17:54:01

标签: python string pandas options

我正在努力寻找看似非常简单的事情。我有一个包含很长字符串的pandas数据框。

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
  • 其中一个stackoverflow答案建议增加列宽 使用pandas显示选项,这也不起作用。
  • 我也没有得到set_printoptions对我的帮助。

任何想法都赞赏。看起来很简单,但无法得到它!

10 个答案:

答案 0 :(得分:101)

您可以使用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'

答案 1 :(得分:8)

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

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

没有值得一提的是,修道院列出整列是不好的,但是对于一条简单的行 - 为什么不呢?

答案 2 :(得分:5)

另一种打印整个字符串的简便方法是在数据帧上调用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']]

答案 3 :(得分:5)

pd.set_option('display.max_colwidth', -1)用于自动换行和多行单元格。

This是有关如何充分利用大熊猫的jupyters显示器的重要资源。

答案 4 :(得分:4)

这是你的意思吗?

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'

答案 5 :(得分:3)

我创建了一个小实用程序功能,对我来说很好

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)

我可以根据需要更改宽度的长度,而无需永久设置任何选项。

答案 6 :(得分:1)

我经常处理你描述的情况的方法是使用.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

中有些相关的问题

答案 7 :(得分: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来为熊猫更改更多选项/设置

答案 8 :(得分:1)

如果您使用的是jupyter笔记本,还可以将pandas数据帧打印为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

答案 9 :(得分:1)

在较新版本的熊猫中,使用:

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