2016-08-26 25 views
5

Podczas analizy danych w Ipythonie często muszę przeglądać dane, drukując ich zawartość do powłoki. Numpy ma możliwość wyświetlania tylko dużych obiektów, gdy są one zbyt długie. Bardzo podoba mi się ta funkcja ndarrays, ale kiedy drukuję wewnętrzny obiekt pythona (np. Słownik z obiektami 15k), są one rzucane na ekran lub czasami przycinane w niezbyt przyjazny sposób. Tak na przykład dla ogromnej słowniku chciałbym zobaczyć w wyjściowym coś takiegoDrukowanie w stylu Numpy dla obiektów Pythona

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

Byłoby idealne, jeśli wyrównanie i zagnieżdżone struktury danych mogą być załatwione. Czy jest to specjalny moduł, który może zapewnić taką funkcjonalność dla podstawowych klas Pythona (lista, dict)? Czy są jakieś triki konfiguracyjne dotyczące ipythona, o których nic nie wiem?

+2

'od pprint import pprint; pprint (my_dict) ' –

+1

Być może użyj pand i przekonwertuj swoją listę lub słownik na ramkę danych do przeglądania. – Alexander

Odpowiedz

1

Istnieje dobra wbudowana biblioteka pprint. Spójrz na to.

>>> 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]} 
+0

Nie znalazłem żadnej funkcji drukowania marginesów w pliku pprint. – Pommy

+0

@pommy afaik jest tylko parametry 'wcięcia',' szerokość' i 'głębokość'. – vsminkov

1

Jeśli twój słownik jest dobrze skonstruowany, możesz go przekonwertować na ramkę danych Pandas do przeglądania.

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] 
+0

Myślę, że to przesada dla celów oglądania. Mógłbym używać numpy w tablicy strukturalnej do tego samego celu, ale nie sądzę, że jest to dobre rozwiązanie. – Pommy

0

Formater numpy ma funkcję elipsy; domyślnie kopie z ponad 1000 przedmiotów.

pprint może sprawić, że wyświetlacz będzie ładniejszy, ale myślę, że nie ma funkcji wielokropka. Ale możesz studiować jego dokumenty.

Z listy można użyć kawałek

list(range(100))[:10] 

zobaczyć ograniczoną liczbę wartości.

Trudniej jest zrobić ze słownikiem. Z pewnym prób i błędów, to działa znośnie:

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

(jestem na Py3 więc potrzebują dodatkowych list).

Nie byłoby trudno napisać własne funkcje narzędzia, jeśli nie możesz znaleźć czegoś w pprint. Jest również możliwe, że robi to jakiś pakiet pod numerem pypi. Na przykład szybkie wyszukiwanie okazało się

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

pprintpp który twierdzi, że jest naprawdę ładna. Ale podobnie jak w magazynie pprint, wydaje się, że bardziej interesuje go głębia zagnieżdżania list i słowników, a nie ich długość.

Powiązane problemy