Подтвердить что ты не робот

Pretty Printing a pandas dataframe

Как я могу напечатать фрейм данных Pandas в виде красивой текстовой таблицы, как показано ниже?

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

Ответ 1

Я только что нашел отличный инструмент для этой цели, он называется табулатурой.

Он печатает табличные данные и работает с 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.

Ответ 2

Вы можете использовать prettytable, чтобы отобразить таблицу как текст. Хитрость заключается в том, чтобы преобразовать data_frame в файл csv в памяти и иметь довольно табличные данные. Здесь код:

from StringIO import StringIO
import prettytable    

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

Ответ 3

Я использовал Ofer-ответ на некоторое время и нашел, что это здорово в большинстве случаев. К сожалению, из-за несоответствий между pandas to_csv и prettytable from_csv, мне пришлось использовать симпатичный вариант по-другому.

Один случай сбоя - это dataframe, содержащий запятые:

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

Prettytable вызывает ошибку формы:

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)

Ответ 5

Если вы находитесь в блокноте Jupyter, вы можете запустить следующий код для интерактивного отображения кадра данных в хорошо отформатированной таблице.

Этот ответ основан на ответе to_html ('temp.html') выше, но вместо создания файла отображает хорошо отформатированную таблицу прямо в блокноте:

from IPython.display import display, HTML

display(HTML(df.to_html()))

Кредит для этого кода в примере: Показать DataFrame в виде таблицы в iPython Notebook

Ответ 6

Следуя ответу Марка, если вы по какой-то причине не используете Jupyter, например, хотите выполнить быстрое тестирование на консоли, вы можете использовать метод DataFrame.to_string, который работает, как минимум, с Pandas 0.12 ( 2014) г.в.

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

Ответ 7

Я хотел распечатать документ с данными, но я хотел добавить некоторые результаты и комментарии на той же странице. Я работал над вышеизложенным, и я не мог получить то, что я хотел. В итоге я использовал операторы file.write(df1.to_csv()) и file.write(",, blah ,,, blah"), чтобы получить свои дополнения на странице. Когда я открыл CSV файл, он сразу перешел к электронной таблице, которая печатала все в правильном темпе и формате.