पांडा डेटाफ़्रेम में पूरी तरह से बहुत लंबी स्ट्रिंग प्रिंट करें


116

मैं प्रतीत होता है कि बहुत ही साधारण चीज से जूझ रहा हूं। मेरे पास एक पांडा डेटा फ्रेम है जिसमें बहुत लंबी स्ट्रिंग है।

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

अब जब मैं उसी को प्रिंट करने की कोशिश करता हूं, तो मुझे पूर्ण स्ट्रिंग नहीं दिखाई देती है बल्कि मैं केवल स्ट्रिंग का हिस्सा देखता हूं।

मैंने निम्नलिखित विकल्पों की कोशिश की

  • का उपयोग करते हुए print(df.iloc[2])
  • का उपयोग करते हुए to_html
  • का उपयोग करते हुए to_string
  • स्टैण्डओवरफ़्लो उत्तर में से एक पांडास डिस्प्ले विकल्प का उपयोग करके कॉलम की चौड़ाई बढ़ाने का सुझाव दिया गया था, जो या तो काम नहीं करता था।
  • मुझे भी नहीं मिला कि कैसे set_printoptionsमेरी मदद करेंगे।

किसी भी विचार की सराहना की। बहुत सरल दिखता है, लेकिन इसे प्राप्त करने में सक्षम नहीं है!

जवाबों:


176

आप यह options.display.max_colwidthनिर्दिष्ट करने के लिए उपयोग कर सकते हैं कि आप डिफ़ॉल्ट प्रतिनिधित्व में अधिक देखना चाहते हैं:

In [2]: df
Out[2]:
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [3]: pd.options.display.max_colwidth
Out[3]: 50

In [4]: pd.options.display.max_colwidth = 100

In [5]: df
Out[5]:
                                                                               one
0                                                                              one
1                                                                              two
2  This is very long string very long string very long string veryvery long string

और वास्तव में, यदि आप केवल एक मान का निरीक्षण करना चाहते हैं, तो इसे एक्सेस करके (एक स्केलर के रूप में, पंक्ति के रूप में df.iloc[2]नहीं) आप पूर्ण स्ट्रिंग भी देखते हैं:

In [7]: df.iloc[2,0]    # or df.loc[2,'one']
Out[7]: 'This is very long string very long string very long string veryvery long string'

2
df.iloc [2,0] - काम नहीं करता - मैं पहली और तीसरी पंक्ति को प्रिंट करूँगा और (
रॉकेट

यह काम करता है, यदि आप तीसरी पंक्ति और पहले कॉलम का तत्व चाहते हैं। यदि आप कुछ और चाहते हैं, तो कृपया एक नया प्रश्न खोलें।
joris

यह काम करता है, thx! मेरे पास 1 कॉलम में ज़िप कोड की एक सूची है और एक फ़ंक्शन का उपयोग करके न्यूनतम और अधिकतम कॉलम वार खोजने के लिए उपयोग करें: df ['zipcodeMinMax'] = df.loc [:, ['zipcodeList']] लागू करें (createMinMaxZipcode, axis)। = 1)। इसलिए फ़ंक्शन के भीतर मैं श्रृंखला (stringZipcodes = zipcodeList.to_string (शीर्षलेख = गलत, अनुक्रमणिका = गलत) पर to_string करता हूं। Zipcodes की लंबी सूची के परिणामस्वरूप अंत में 3 डॉट्स प्राप्त हुए जैसे "1111 ..."। वास्तव में ऐसा नहीं होता है यदि आप सूचकांक और स्तंभ (एक अदिश के रूप में) के आधार पर मूल्यों का चयन करते हैं। मेरा प्रश्न: यह व्यवहार क्यों? लागू करने के लिए प्रदर्शन विकल्प सेट करना मुझे अजीब लगता है? धन्यवाद!
Wouter

1
@ राउटर यदि आपके पास एक अलग सवाल है, तो यहां टिप्पणी करने के बजाय एक नया पूछना बेहतर है
जोरी

1
यह कई लाइनों वाले पैराग्राफ की तरह बड़े स्ट्रिंग के लिए काम नहीं करता है।
देवांश

37

pd.set_option('display.max_colwidth', -1)स्वचालित लाइनब्रेक और मल्टी-लाइन कोशिकाओं के लिए उपयोग करें ।

यह एक महान संसाधन है कि कैसे पिपास के साथ ज्यूपिटर्स डिस्प्ले को पूरी तरह से उपयोग किया जाए।


6
pd.set_option('display.max_colwidth', None)नए संस्करणों के लिए
कुकी

यह सबसे अच्छा जवाब है
क्लैसी

17

एक और, बहुत सरल दृष्टिकोण सूची समारोह को कॉल करना है:

list(df['one'][2])
# output:
['This is very long string very long string very long string veryvery long string']

उल्लेख के लायक नहीं, कि पूरे कॉलम को सूचीबद्ध करने के लिए कॉन्वेंट करना अच्छा नहीं है, लेकिन एक सरल रेखा के लिए - क्यों नहीं


1
यदि आप कुछ खोज मानदंडों के आधार पर अपने df को नीचे कर रहे हैं, और यह एक पंक्ति में नीचे है, तो यह काम नहीं करता है। वैसे भी डिबगिंग के लिए यह सबसे सरल तरीका है, और मेरी इच्छा है कि यह काम करेगा, लेकिन मुझे नहीं पता कि यह क्यों नहीं है। आपको एक "*** KeyError: 0" मिलता है। मुझे लगता है कि यह एक "अदिश" की तरह होने के साथ है जब केवल एक ही मूल्य है।
Starman

आज तक, यह सभी वर्णों को df में एक क्वेरी के साथ लौटाता है जो 127 वर्णों वाली दो कोशिकाओं को लौटाता है, जिसे मैंने पाने की कोशिश में निराश किया है। कि किसी को भी मदद करता है, तो
avirr

12

पूरे स्ट्रिंग को प्रिंट करने का एक और आसान तरीका valuesडेटाफ़्रेम पर कॉल करना है।

df = pd.DataFrame({'one' : ['one', 'two', 
      'This is very long string very long string very long string veryvery long string']})

print(df.values)

आउटपुट होगा

[['one']
 ['two']
 ['This is very long string very long string very long string veryvery long string']]

4

क्या आपका यही मतलब है?

In [7]: x =  pd.DataFrame({'one' : ['one', 'two', 'This is very long string very long string very long string veryvery long string']})

In [8]: x
Out[8]: 
                                                 one
0                                                one
1                                                two
2  This is very long string very long string very...

In [9]: x['one'][2]
Out[9]: 'This is very long string very long string very long string veryvery long string'

4

प्रिंट करने से पहले अपने कोड में निम्नलिखित पंक्ति जोड़ें।

 pd.options.display.max_colwidth = 90  # set a value as your need

आप बस अन्य अतिरिक्त विकल्पों को स्थापित करने के लिए निम्नलिखित कदम उठा सकते हैं,

  • आप अधिक कॉलम प्रदर्शित करने के लिए पंडों max_columns सुविधा के विकल्प बदल सकते हैं

    import pandas as pd
    pd.options.display.max_columns = 10

    (यह 10 कॉलम प्रदर्शित करने की अनुमति देता है, आप इसे आवश्यकतानुसार बदल सकते हैं)

  • जैसे कि आप अधिक पंक्तियों को प्रदर्शित करने के लिए आवश्यकतानुसार पंक्तियों की संख्या को बदल सकते हैं

    pd.options.display.max_rows = 999

    (यह एक बार में 999 पंक्तियों को मुद्रित करने की अनुमति देता है)

यह ठीक काम करना चाहिए

कृपया पंडों के लिए अधिक विकल्प / सेटिंग्स बदलने के लिए डॉक्टर को देखें


3

जिस तरह से आप अक्सर वर्णित स्थिति से निपटते हैं वह .to_csv()विधि का उपयोग करना और stdout को लिखना है:

import sys

df.to_csv(sys.stdout)

अद्यतन: यह अब समान प्रभाव के Noneबजाय सिर्फ उपयोग करने के लिए संभव होना चाहिए sys.stdout!

यह किसी भी तार की संपूर्णता सहित पूरे डेटाफ़्रेम को डंप करना चाहिए। आप स्तंभ विभाजकों को कॉन्फ़िगर करने के लिए to_csv पैरामीटर का उपयोग कर सकते हैं, चाहे सूचकांक मुद्रित हो, आदि। हालांकि यह ठीक से रेंडर करने की तुलना में कम सुंदर होगा।

मैंने इसे मूल रूप से पांडा के डेटाफ्रेम के सभी स्तंभों से आउटपुट डेटा पर कुछ हद तक संबंधित प्रश्न के उत्तर में पोस्ट किया है


2

मैंने एक छोटी उपयोगिता फ़ंक्शन बनाया है, यह मेरे लिए अच्छा काम करता है

def display_text_max_col_width(df, width):
    with pd.option_context('display.max_colwidth', width):
        print(df)

display_text_max_col_width(train_df["Description"], 800)

मैं अपनी आवश्यकता के अनुसार चौड़ाई की लंबाई को बदल सकता हूं, बिना किसी विकल्प के स्थायी रूप से।


1

यदि आप ज्यूपिटर नोटबुक का उपयोग कर रहे हैं, तो आप पांडा डेटाफ़्रेम को HTML तालिका के रूप में भी प्रिंट कर सकते हैं, जो पूर्ण स्ट्रिंग्स को प्रिंट करेगा।

from IPython.display import display, HTML
display(HTML(df.to_html()))

उत्पादन

    one
0   one
1   two
2   This is very long string very long string very long string veryvery long string
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.