একটি প্যান্ডাস ডেটা ফ্রেম প্রিন্টিং প্রিন্টিং


120

নীচের মত আমি কীভাবে একটি দুর্দান্ত পাঠ্য-ভিত্তিক টেবিল হিসাবে একটি পান্ডাস ডেটা ফ্রেম মুদ্রণ করতে পারি?

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

উত্তর:


192

আমি ঠিক যে প্রয়োজন জন্য একটি দুর্দান্ত সরঞ্জাম পাওয়া করেছি, এটা বলা হয় সারসংক্ষেপ

এটি সারণী তথ্য মুদ্রণ করে এবং এর সাথে কাজ করে 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        |
+----+-----------+-------------+

বিঃদ্রঃ:

সব ধরণের ডেটার জন্য সারি সূচকগুলি দমন করতে, পাস করুন showindex="never"বা showindex=False


5
যদি আপনার রক্তক্ষরণ প্রান্তে অ্যাক্সেস না থাকে তবে আপনি tabulate([list(row) for row in df.values], headers=list(df.columns))সূচকটি থেকে মুক্তি পেতে পারেন
পেড্রো এম ডুয়ার্টে

4
আপনার সারি সূচক এবং কলামগুলিতে শ্রেণিবদ্ধতা থাকলে খুব ভাল কাজ করে না।
সিদ্ধার্থ

নিশ্চিত করুন যে আপনি করছেন print(tabulate(df, **kwargs))এবং সহজভাবে নয় tabulate(df, **kwargs); \n
তারপরে

6
বাম সূচক কলামটি দমন করতে কেউ যোগ করতেও পারেshowindex=False
আর্থার


26

পান্ডাস> = 1.0

আপনি যদি কোনও গিথুব মার্কডাউনতে আপনার ডেটা ডাম্প করার জন্য একটি ইনবিল্ট ফাংশন চান তবে আপনার এখন একটি রয়েছে। একবার দেখুন to_markdown:

df = pd.DataFrame({"A": [1, 2, 3], "B": [1, 2, 3]}, index=['a', 'a', 'b'])  
print(df.to_markdown()) 

|    |   A |   B |
|:---|----:|----:|
| a  |   1 |   1 |
| a  |   2 |   2 |
| b  |   3 |   3 |

গিথুব এ দেখতে কেমন লাগে তা এখানে:

এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে আপনার এখনও tabulateপ্যাকেজ ইনস্টল করা প্রয়োজন।


4
আমি ব্যবহৃত to_markdownআমার স্ক্রিপ্ট থেকে নির্গত markdown, এবং পাইপ যে মধ্যে glow -( github) যথাযথ ফলাফল সঙ্গে টার্মিনালে markdown রেন্ডার করতে। ( এখানে স্ক্রিপ্ট )
সান ব্রেকেনরিজ

19

আপনি যদি জপিটার নোটবুকে থাকেন তবে ভাল ফরমেটেড টেবিলটিতে ইন্টারফেসটিভভাবে ডেটাফ্রেমটি প্রদর্শনের জন্য আপনি নীচের কোডটি চালাতে পারেন।

এই উত্তরটি উপরের টু_এইচটিএমএল ('টেম্প। Html') উত্তরে নির্মিত হয়েছে, তবে কোনও ফাইল তৈরির পরিবর্তে নোটবুকে ভাল ফর্ম্যাটযুক্ত টেবিলটি প্রদর্শন করে:

from IPython.display import display, HTML

display(HTML(df.to_html()))

উদাহরণস্বরূপ এই কোডটির জন্য ক্রেডিট: আইপিথন নোটবুকে টেবিল হিসাবে ডেটাফ্রেম দেখান


15

আপনি ব্যবহার করতে পারেন prettytable পাঠ্য হিসেবে টেবিল রেন্ডার করতে। কৌশলটি হ'ল ডেটা_ফ্রেমকে একটি ইন-মেমরি সিএসভি ফাইলে রূপান্তর করা এবং এটি সুন্দরভাবে পড়তে হবে। কোডটি এখানে:

from StringIO import StringIO
import prettytable    

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

এটি পান্ডার কোন সংস্করণ ছিল?
ডাব্লুএফএফ

5
আফাইক, prettytableমূলত পরিত্যক্ত হিসাবে বিবেচিত হয়। লজ্জাজনকও, কারণ এটি একটি দুর্দান্ত প্যাকেজ ছিল। :(
dmn

@ ডিএমএন তাই এটি আর বজায় রাখা হয় না?
মিউন

4
prettytableযেহেতু এপ্রিল 6 রিলিজ দেননি, 2013. tabulateতার আধ্যাত্মিক পূর্বসুরী এবং নিয়মিত রিলিজ, 24 জানুয়ারি, 2019. সাম্প্রতিক হচ্ছে হয়েছে
গবেট

7

আমি কিছুক্ষণের জন্য ওফরের উত্তরটি ব্যবহার করেছি এবং বেশিরভাগ ক্ষেত্রে এটি দুর্দান্ত পেয়েছি। দুর্ভাগ্যবশত, মধ্যে অসঙ্গতি কারণে পান্ডাস এর to_csv এবং prettytable এর from_csv, আমি অন্যভাবে prettytable ব্যবহার ছিল।

একটি ব্যর্থতার কেস হ'ল ডেটা ফ্রেম যা কমা রয়েছে:

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

খুব সুন্দর ফর্ম একটি ত্রুটি উত্থাপন:

Error: Could not determine delimiter

নিম্নলিখিত ফাংশন এই কেস পরিচালনা করে:

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

আপনি যদি সূচকের বিষয়ে চিন্তা না করেন তবে ব্যবহার করুন:

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

হাই, format_for_print()ফাংশনটি পান্ডাস ডেটা ফ্রেমের সূচি মুদ্রণ করছে বলে মনে হচ্ছে না। আমি সূচকটি ব্যবহার করে সেট করেছিলাম df.index.name = 'index'তবে এটি কোনও নামের সাথে সূচক কলামটি মুদ্রণ করে না।
এডেজ

4

মার্কের উত্তর অনুসরণ করে, যদি আপনি কোনও কারণে জুপিটার ব্যবহার না করে থাকেন , যেমন আপনি কনসোলে কিছু দ্রুত পরীক্ষা করতে চান, তবে আপনি সেই DataFrame.to_stringপদ্ধতিটি ব্যবহার করতে পারেন - যা কমপক্ষে - পান্ডাস ০.০২ (২০১৪) এর পরে ।

import pandas as pd

matrix = [(1, 23, 45), (789, 1, 23), (45, 678, 90)]
df = pd.DataFrame(matrix, columns=list('abc'))
print(df.to_string())

#  outputs:
#       a    b   c
#  0    1   23  45
#  1  789    1  23
#  2   45  678  90

DataFrame.to_stringঅফিসিয়াল ডক্স: pandas.pydata.org/pandas-docs/stable/references/api/…
পার্থ

1

আপনি এই জাতীয় কিছু খুঁজছেন হতে পারে:

def tableize(df):
    if not isinstance(df, pd.DataFrame):
        return
    df_columns = df.columns.tolist() 
    max_len_in_lst = lambda lst: len(sorted(lst, reverse=True, key=len)[0])
    align_center = lambda st, sz: "{0}{1}{0}".format(" "*(1+(sz-len(st))//2), st)[:sz] if len(st) < sz else st
    align_right = lambda st, sz: "{0}{1} ".format(" "*(sz-len(st)-1), st) if len(st) < sz else st
    max_col_len = max_len_in_lst(df_columns)
    max_val_len_for_col = dict([(col, max_len_in_lst(df.iloc[:,idx].astype('str'))) for idx, col in enumerate(df_columns)])
    col_sizes = dict([(col, 2 + max(max_val_len_for_col.get(col, 0), max_col_len)) for col in df_columns])
    build_hline = lambda row: '+'.join(['-' * col_sizes[col] for col in row]).join(['+', '+'])
    build_data = lambda row, align: "|".join([align(str(val), col_sizes[df_columns[idx]]) for idx, val in enumerate(row)]).join(['|', '|'])
    hline = build_hline(df_columns)
    out = [hline, build_data(df_columns, align_center), hline]
    for _, row in df.iterrows():
        out.append(build_data(row.tolist(), align_right))
    out.append(hline)
    return "\n".join(out)


df = pd.DataFrame([[1, 2, 3], [11111, 22, 333]], columns=['a', 'b', 'c'])
print tableize(df)
আউটপুট:
+ ------- + ---- + ----- +
| ক | খ | গ |
+ ------- + ---- + ----- +
| 1 | 2 | 3 |
| 11111 | 22 | 333 |
+ ------- + ---- + ----- +

-6

আমি একটি ডেটাফ্রেমের একটি পেপার প্রিন্টআউট চেয়েছিলাম তবে আমি একই পৃষ্ঠাতে কিছু ফলাফল এবং মন্তব্য যুক্ত করতে চেয়েছিলাম। আমি উপরের মাধ্যমে কাজ করেছি এবং আমি যা চাই তা পাই না। আমি পৃষ্ঠাতে আমার অতিরিক্ত পেতে ফাইল.উরাইট (df1.to_csv ()) এবং ফাইল.উইট (",,, ব্লা ,,,,, ব্লা") বিবৃতি ব্যবহার করে শেষ করেছি। আমি যখন সিএসভি ফাইলটি খুললাম তখন এটি সরাসরি স্প্রেডশিটে চলে গেল যা ডান গতি এবং বিন্যাসে সবকিছু মুদ্রিত করেছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.