【问题标题】:Numpy-like printing for python objectspython对象的类似numpy的打印
【发布时间】:2016-08-26 19:22:49
【问题描述】:

在 Ipython 中进行数据分析时,我经常需要通过将数据内容打印到 shell 来查看数据。 Numpy 能够在大型对象本身太长时仅显示其边距。我真的很喜欢 ndarrays 的这个特性,但是当我打印内部 python 对象(例如,其中包含 15k 个对象的字典)时,它们会被转储到屏幕上,或者有时会以不太友好的方式被截断。 因此,例如对于一个巨大的字典,我希望在输出中看到类似这样的内容

{ '39416' : '1397',  
  '39414' : '1397',  
  '7629'  : '7227',  
  ...,  
  '31058' : '9606',  
  '21097' : '4062',  
  '32040' : '9606' }  

如果可以处理对齐和嵌套数据结构,那将是完美的。它们是一个特殊的模块,可以为 python 基本类(list、dict)提供这样的功能吗?还是有一些我一无所知的ipython配置技巧?

【问题讨论】:

  • from pprint import pprint; pprint(my_dict)
  • 也许使用 Pandas 并将您的列表或字典转换为数据框以供查看。

标签: python printing ipython


【解决方案1】:

有一个很好的内置库pprint。看看吧。

>>> from pprint import pprint
>>> pprint({x: list(range(x)) for x in range(10)})
{0: [],
 1: [0],
 2: [0, 1],
 3: [0, 1, 2],
 4: [0, 1, 2, 3],
 5: [0, 1, 2, 3, 4],
 6: [0, 1, 2, 3, 4, 5],
 7: [0, 1, 2, 3, 4, 5, 6],
 8: [0, 1, 2, 3, 4, 5, 6, 7],
 9: [0, 1, 2, 3, 4, 5, 6, 7, 8]}

【讨论】:

  • 我在 pprint 中没有找到任何打印边距的功能。
  • @pommy afaik 只有indentwidthdepth 参数。
【解决方案2】:

如果您的字典结构良好,您可以将其转换为 Pandas 数据框以供查看。

import numpy as np
import pandas as pd

>>> pd.DataFrame({'random normal': np.random.randn(1000), 
                  'random int': np.random.randint(0, 10, 1000)})
     random int  random normal
0             6       0.850827
1             7       0.486551
2             4      -0.111008
3             9      -1.319320
4             6      -0.393774
5             1      -0.878507
..          ...            ...
995           2      -1.882813
996           3      -0.121003
997           3       0.155835
998           5       0.920318
999           2       0.216229

[1000 rows x 2 columns]

【讨论】:

  • 我认为这对于观看目的来说太过分了。我可以将 numpy 结构化数组用于相同的目的,但我认为这不是一个好的解决方案。
【解决方案3】:

numpy 格式化程序具有省略号功能;默认情况下,它包含 1000 多个项目。

pprint 可以使显示更好,但我认为它没有省略号功能。但是你可以研究它的文档。

有了列表,我可以使用切片

list(range(100))[:10]

查看有限数量的值。

用字典更难做到这一点。经过一些试验和错误,这可以正常工作:

{k:dd[k] for k in list(dd.keys())[:10]}

(我在 Py3 上,所以需要额外的 list)。

如果您在pprint 中找不到内容,编写自己的实用程序函数并不难。 pypi 上的某些软件包也可能这样做。例如快速搜索出现

https://pypi.python.org/pypi/pprintpp

pprintpp 声称实际上很漂亮。但就像股票pprint 一样,它似乎更关心列表和字典的嵌套深度,而不是它们的长度。

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2017-09-20
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    相关资源
    最近更新 更多