2013-08-30 9 views
32

मैं एक पांडा डेटाफ्रेम को एक अच्छी टेक्स्ट-आधारित तालिका के रूप में कैसे प्रिंट कर सकता हूं, जैसे निम्न?सुंदर प्रिंटिंग एक पांडा डेटाफ्रेम

+------------+---------+-------------+ 
| column_one | col_two | column_3 | 
+------------+---------+-------------+ 
|   0 | 0.0001 | ABCD  | 
|   1 | 1e-005 | ABCD  | 
|   2 | 1e-006 | long string | 
|   3 | 1e-007 | ABCD  | 
+------------+---------+-------------+ 

अपडेट: मुझे इसका समाधान मिला, नीचे दिए गए उत्तर के रूप में पोस्ट किया गया।

उत्तर

12

तालिका के रूप में तालिका प्रस्तुत करने के लिए आप prettytable का उपयोग कर सकते हैं। यह चाल डेटा_फ्रेम को इन-मेमोरी सीएसवी फ़ाइल में कनवर्ट करना है और इसे सुंदर टेक्स्ट पढ़ना है। यहां कोड है:

from StringIO import StringIO 
import prettytable  

output = StringIO() 
data_frame.to_csv(output) 
output.seek(0) 
pt = prettytable.from_csv(output) 
print pt 
+0

पांडा का यह संस्करण क्या था? – WAF

+0

AFAIK, 'prettytable' काफी हद तक छोड़ दिया जाता है। शर्म, भी, क्योंकि यह एक अच्छा पैकेज था। :( – dmn

+0

@ डीएमएन तो यह अब और नहीं बनाए रखा है? – muon

6

मैंने थोड़ी देर के लिए ओफर का जवाब इस्तेमाल किया और अधिकांश मामलों में यह बहुत अच्छा पाया। दुर्भाग्यवश, pandas's to_csv और prettytable के from_csv के बीच विसंगतियों के कारण, मुझे सुंदर तरीके से सुंदर तरीके का उपयोग करना पड़ा।

def format_for_print(df):  
    table = PrettyTable([''] + list(df.columns)) 
    for row in df.itertuples(): 
     table.add_row(row) 
    return str(table) 
:

Error: Could not determine delimiter 

निम्नलिखित समारोह इस मामले संभालता है:

pd.DataFrame({'A': [1, 2], 'B': ['a,', 'b']}) 

Prettytable फार्म की एक त्रुटि को जन्म देती है:

एक विफलता के मामले एक dataframe युक्त अल्पविराम का है

यदि आपको इंडेक्स की परवाह नहीं है, का उपयोग करें:

def format_for_print2(df):  
    table = PrettyTable(list(df.columns)) 
    for row in df.itertuples(): 
     table.add_row(row[1:]) 
    return str(table) 
+0

हाय, 'format_for_print()' फ़ंक्शन पांडस डेटाफ्रेम की अनुक्रमणिका मुद्रित प्रतीत नहीं होता है। मैंने 'df.index.name =' index 'का उपयोग करके इंडेक्स सेट किया है। लेकिन यह किसी नाम के साथ इंडेक्स कॉलम प्रिंट नहीं करता है। –

58

मैं सिर्फ इतना है कि जरूरत के लिए एक महान उपकरण मिल गया है, यह tabulate कहा जाता है।

यह टैब्यूलर डेटा प्रिंट करता है और DataFrame के साथ काम करता है।

from tabulate import tabulate 
import pandas as pd 

df = pd.DataFrame({'col_two' : [0.0001, 1e-005 , 1e-006, 1e-007], 
        'column_3' : ['ABCD', 'ABCD', 'long string', 'ABCD']}) 
print tabulate(df, headers='keys', tablefmt='psql') 

+----+-----------+-------------+ 
| | col_two | column_3 | 
|----+-----------+-------------| 
| 0 | 0.0001 | ABCD  | 
| 1 | 1e-05 | ABCD  | 
| 2 | 1e-06 | long string | 
| 3 | 1e-07 | ABCD  | 
+----+-----------+-------------+ 

नोट: वहाँ एक खुला Pull request कि शामिल/सूचकांक को बाहर करने की अनुमति नहीं है।

+4

यदि आपके पास खून बहने वाले किनारे तक पहुंच नहीं है, तो आप df.values ​​में पंक्ति के लिए टैबलेट ([सूची (पंक्ति)] कर सकते हैं, हेडर = सूची (df.columns)) 'सूचकांक से छुटकारा पाने के लिए –

+1

जब आपके पास पंक्ति सूचकांक और कॉलम में पदानुक्रम होते हैं तो बहुत अच्छी तरह से काम नहीं करते हैं। – Siddharth

+0

सुनिश्चित करें कि आप' प्रिंट (टैबलेट (डीएफ, ** kwargs)) 'प्रिंट करें और केवल' टैबलेट (डीएफ, ** kwargs) 'बाद वाला सभी नई लाइनें दिखाएगा \ n' .... – Dror

संबंधित मुद्दे