类似于Numpy的python对象打印

时间:2016-08-26 19:22:50

标签: python printing ipython

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

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

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

3 个答案:

答案 0 :(得分: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]}

答案 1 :(得分:1)

如果您的词典结构合理,您可以将其转换为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]

答案 2 :(得分:0)

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一样,它似乎更关心列表和词典的嵌套深度,而不是它们的长度。