Wiele wyjść komórki IPython Notebook


83

Uruchamiam tę komórkę w notatniku IPython:

# salaries and teams are Pandas dataframe
salaries.head()
teams.head()

W rezultacie otrzymuję dane wyjściowe tylko teamsramki danych, a nie obu salariesi teams. Jeśli po prostu uruchomię salaries.head(), otrzymam wynik dla salariesramki danych, ale po uruchomieniu obu instrukcji widzę tylko wynik teams.head(). Jak mogę to poprawić?


`from IPython.core.interactiveshell import InteractiveShell 'InteractiveShell.ast_node_interactivity =" all "

Odpowiedzi:


130

czy próbowałeś displaypolecenia?

from IPython.display import display
display(salaries.head())
display(teams.head())

16
Z dokumentacji: „Od IPython 5.4 i 6.1 display()jest automatycznie udostępniany użytkownikowi bez importu”.
Georgy

Używam IPythona 6.4.0 i musiałem użyć instrukcji importu from IPython.display import display
GAURAV SRIVASTAVA

101

Prostszy sposób:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

Oszczędza to konieczności wielokrotnego wpisywania „Display”

Powiedzmy, że komórka zawiera to:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

a = 1
b = 2

a
b

Wtedy wynik będzie:

Out[1]: 1
Out[1]: 2

Jeśli używamy IPython.display.display:

from IPython.display import display

a = 1
b = 2

display(a)
display(b)

Wynik to:

1
2

Więc to samo, ale bez Out[n]części.


Czy to jest nowe? Nie przypominam sobie, bym widziała tę opcję kilka lat temu.
tglaria

1
Nie widzę tego nawet w zaktualizowanej dokumentacji: ipython.readthedocs.io/en/stable/api/generated/… Ale jest w opcjach "Terminala" IPythona
tglaria

2
O rany, chciałbym móc na to odpowiedzieć. Pamiętam, że widziałem go na innym pytaniu kilka miesięcy temu (chciałbym mieć źródło) i działało idealnie dla mnie, więc trzymałem go w tylnej kieszeni.
Aru Singh

Byłoby miło dodać, jak to będzie się zachowywać, czy będzie wyświetlane dla każdego wiersza?
matanster

1
Powinieneś używać get_ipython().ast_node_interactivity = 'all', a nie zastępować właściwości klasy ciągiem znaków stałych!
Eric

4

Zapewniać,

print salaries.head()
teams.head()

5
Ładnie, ale wyjście print salaries.head()nie jest dobrze sformatowane.
Lokesh

4

Notatnik IPython pokazuje tylko ostatnią zwracaną wartość w komórce. Najłatwiejszym rozwiązaniem dla twojego przypadku jest użycie dwóch ogniw.

Jeśli naprawdę potrzebujesz tylko jednej komórki, możesz zrobić taki hack :

class A:
    def _repr_html_(self):
        return salaries.head()._repr_html_() + '</br>' + teams.head()._repr_html_()

A()

Jeśli potrzebujesz tego często, zrób z tego funkcję:

def show_two_heads(df1, df2, n=5):
    class A:
        def _repr_html_(self):
            return df1.head(n)._repr_html_() + '</br>' + df2.head(n)._repr_html_()
    return A()

Stosowanie:

show_two_heads(salaries, teams)

Wersja na więcej niż dwie głowy:

def show_many_heads(*dfs, n=5):
    class A:
        def _repr_html_(self):
            return  '</br>'.join(df.head(n)._repr_html_() for df in dfs) 
    return A()

Stosowanie:

show_many_heads(salaries, teams, df1, df2)

0

Wymieniając wszystkie rozwiązania:

Porównanie tych w sesji interaktywnej:

In [1]: import sys

In [2]: display(1)          # appears without Out
   ...: sys.displayhook(2)  # appears with Out
   ...: 3                   # missing
   ...: 4                   # appears with Out
1
Out[2]: 2
Out[2]: 4

In [3]: get_ipython().ast_node_interactivity = 'all'

In [2]: display(1)          # appears without Out
   ...: sys.displayhook(2)  # appears with Out
   ...: 3                   # appears with Out (different to above)
   ...: 4                   # appears with Out
1
Out[4]: 2
Out[4]: 3
Out[4]: 4

Zauważ, że zachowanie w Jupyter jest dokładnie takie samo, jak w ipythonie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.