IPython नोटबुक सेल कई आउटपुट


83

मैं इस सेल को IPython नोटबुक में चला रहा हूं:

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

नतीजा यह है कि मैं केवल के उत्पादन में हो रही है teamsबल्कि दोनों की तुलना में डेटा फ्रेम salariesऔर teams। अगर मैं सिर्फ रन करता salaries.head()हूं तो मुझे salariesडेटा-फ्रेम के लिए परिणाम मिलता है, लेकिन दोनों स्टेटमेंट को चलाने पर मुझे केवल इसका आउटपुट दिखाई देता है teams.head()। यह कैसे सही हो सकता है?


`IPython.core.interactiveshell इंपोर्ट इंटरएक्टिव सेशेल 'इंटरएक्टिव सेशेल_नोड_इंटरनेटिविटी =" ऑल "

जवाबों:


130

क्या आपने displayकमांड की कोशिश की है ?

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

16
डॉक्स से: "चूंकि आईपीथॉन 5.4 और 6.1 display()स्वचालित रूप से आयात के बिना उपयोगकर्ता को उपलब्ध कराया जाता है।"
Georgy

मैं IPython 6.4.0 का उपयोग कर रहा हूं और मुझे आयात विवरण का उपयोग करना था from IPython.display import display
GAURAV SRIVASTAVA

101

एक आसान तरीका:

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

यह आपको बार-बार "डिस्प्ले" टाइप करने से बचाता है

कहते हैं कि सेल में यह शामिल है:

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

a = 1
b = 2

a
b

तब उत्पादन होगा:

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

यदि हम उपयोग करते हैं IPython.display.display:

from IPython.display import display

a = 1
b = 2

display(a)
display(b)

आउटपुट है:

1
2

तो एक ही बात है, लेकिन Out[n]भाग के बिना ।


क्या यह नया है? मुझे कुछ साल पहले इस विकल्प को देखकर याद नहीं है।
टिगलिया

1
मैं इसे अद्यतन किए गए दस्तावेज़ में भी नहीं देखता: ipython.readthedocs.io/en/stable/api/generated/… लेकिन "टर्मिनल" पर है IPython विकल्प: ipython.readthedocs
tglaria

2
अरे यार, काश मैं इसका जवाब दे पाता। मुझे याद है कि इसे एक अलग प्रश्न पर महीनों पहले देखा था (काश मैं स्रोत हो सकता था) और यह मेरे लिए पूरी तरह से काम करता है इसलिए मैंने इसे अपनी पिछली जेब में रखा है।
अरु सिंह

यह जोड़ना अच्छा होगा कि यह कैसा व्यवहार करेगा, क्या यह प्रत्येक और प्रत्येक पंक्ति के लिए प्रदर्शित होगा?
मई'१ '

1
आपको get_ipython().ast_node_interactivity = 'all'निरंतर स्ट्रिंग के साथ वर्ग की संपत्ति की जगह का उपयोग नहीं करना चाहिए !
एरिक


4

आईपीथॉन नोटबुक एक सेल में केवल अंतिम रिटर्न मान दिखाता है। आपके मामले का सबसे आसान समाधान दो कोशिकाओं का उपयोग करना है।

यदि आपको वास्तव में केवल एक सेल की आवश्यकता है तो आप इस तरह से एक हैक कर सकते हैं :

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

A()

यदि आपको अक्सर इसकी आवश्यकता होती है, तो इसे कार्य करें:

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()

उपयोग:

show_two_heads(salaries, teams)

दो से अधिक सिर के लिए एक संस्करण:

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()

उपयोग:

show_many_heads(salaries, teams, df1, df2)

0

सभी समाधानों की गणना:

  • sys.displayhook(value), जो IPython / jupyter हुक करता है। ध्यान दें displayकि यह कॉलिंग से थोड़ा अलग व्यवहार करता है , क्योंकि इसमें Out[n]पाठ शामिल है । यह नियमित रूप से अजगर में भी ठीक काम करता है!

  • display(value), इस उत्तर में

  • get_ipython().ast_node_interactivity = 'all'। यह इस उत्तर द्वारा लिए गए दृष्टिकोण के समान है लेकिन बेहतर है ।

एक इंटरैक्टिव सत्र में इनकी तुलना:

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

ध्यान दें कि ज्यूपिटर में व्यवहार बिल्कुल वैसा ही है जैसा कि आइपीथॉन में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.