Как распечатать панды DataFrame без индекса


170

Я хочу напечатать весь фрейм данных, но я не хочу печатать индекс

Кроме того, один столбец имеет тип datetime, я просто хочу напечатать время, а не дату.

Фрейм данных выглядит так:

   User ID           Enter Time   Activity Number
0      123  2014-07-08 00:09:00              1411
1      123  2014-07-08 00:18:00               893
2      123  2014-07-08 00:49:00              1041

Я хочу напечатать как

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041

1
Вы используете терминологию («фрейм данных», «индекс»), которая заставляет меня думать, что вы на самом деле работаете в R, а не в Python. Просьба уточнить. В любом случае нам нужно увидеть существующий код, который печатает этот «фрейм данных», чтобы иметь хоть какой-то шанс помочь. Пожалуйста, прочитайте и следуйте инструкциям на stackoverflow.com/help/mcve
zwol

... Я скажу, что если это на самом деле Python и это datetime.datetimeобъекты во втором столбце, то вы можете печатать только время, используя strftimeметод, с соответствующей строкой формата (вероятно "%H:%M:%S").
zwol

17
@Zack: DataFrameимя 2D-структуры данных в pandasпопулярной библиотеке анализа данных Python.
DSM

Ответы:


217
print df.to_string(index=False)

9
Это хорошо, однако он больше не содержит табуляцию, которая является помехой при копировании в excel
Rockbar

7
@Rockbar, если вы хотите скопировать / экспортировать в Excel, вы должны использовать в df.to_csvлюбом случае.
U2EF1

3
Для меня метки столбцов получаются неоправданными к данным (в начале отсутствуют пробелы). Возможно, потому что мои данные занимают больше символов, чем метка столбца. Добавление аргумента justify = 'left' исправляет его, хотя, очевидно, меняет выравнивание меток столбца.
ErnestScribbler

1
Вы также можете использовать, df.to_clipboard()а затем вставить в Excel. Полезно для работы с глупым Windows "Вы не можете редактировать открытый документ" BS.
BallpointBen

df.to_excel('filename.xlsx', index=False)
Sonicsmooth

30
print(df.to_csv(sep='\t', index=False))

Или возможно:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))

3
Как это возможно, поскольку DataFrame.to_csv не имеет возвращаемого значения? Я получаю только Ни один распечатан.
Юнг Роу

Действительно, ОП попросили напечатать. Этот комментарий не печатает фрейм данных, а сохраняет его в CSV.
Павел

24

Строка ниже будет скрывать столбец индекса DataFrame при печати

df.style.hide_index()

8
Требуется пакет jinja2 и не выводит желаемый результат с Python 3.7
PeterXX

1
Я считаю этот ответ наиболее эффективным для копирования / вставки в таблицу при составлении отчета, спасибо!
Leas

8

Если вы хотите распечатать фреймы данных, то вы можете использовать пакет tabulate .

import pandas as pd
import numpy as np
from tabulate import tabulate

def pprint_df(dframe):
    print tabulate(dframe, headers='keys', tablefmt='psql', showindex=False)

df = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

pprint_df(df)

В частности, showindex=Falseкак видно из названия, позволяет не показывать индекс. Вывод будет выглядеть следующим образом:

+--------+--------+--------+
|   col1 |   col2 |   col3 |
|--------+--------+--------|
|     15 |     76 |   5175 |
|     30 |     97 |   3331 |
|     34 |     56 |   3513 |
|     50 |     65 |    203 |
|     84 |     75 |   7559 |
|     41 |     82 |    939 |
|     78 |     59 |   4971 |
|     98 |     99 |    167 |
|     81 |     99 |   6527 |
|     17 |     94 |   4267 |
+--------+--------+--------+


4

Если вы просто хотите, чтобы строка / json печатала, это можно решить с помощью:

print(df.to_string(index=False))

Buf, если вы тоже хотите сериализовать данные или даже отправить их в MongoDB, было бы лучше сделать что-то вроде:

document = df.to_dict(orient='list')

На данный момент существует 6 способов для ориентирования данных, проверьте больше в документах Panda, которые лучше подходят вам.


4

Чтобы ответить на вопрос «Как напечатать фрейм данных без индекса», вы можете установить индекс как массив пустых строк (по одной на каждую строку в фрейме данных), например:

blankIndex=[''] * len(df)
df.index=blankIndex

Если мы используем данные из вашего поста:

row1 = (123, '2014-07-08 00:09:00', 1411)
row2 = (123, '2014-07-08 00:49:00', 1041)
row3 = (123, '2014-07-08 00:09:00', 1411)
data = [row1, row2, row3]
#set up dataframe
df = pd.DataFrame(data, columns=('User ID', 'Enter Time', 'Activity Number'))
print(df)

который обычно распечатывается как:

   User ID           Enter Time  Activity Number
0      123  2014-07-08 00:09:00             1411
1      123  2014-07-08 00:49:00             1041
2      123  2014-07-08 00:09:00             1411

Создавая массив с таким количеством пустых строк, сколько строк в кадре данных:

blankIndex=[''] * len(df)
df.index=blankIndex
print(df)

Это удалит индекс из вывода:

  User ID           Enter Time  Activity Number
      123  2014-07-08 00:09:00             1411
      123  2014-07-08 00:49:00             1041
      123  2014-07-08 00:09:00             1411

И в Jupyter Notebooks будет отображаться в соответствии с этим снимком экрана: кадр данных Juptyer Notebooks без столбца индекса


Несмотря на то, что это немного странно, это лучшее решение для ИМО.
Corel

0

Подобно многим ответам выше, в которых используется df.to_string (index = False), я часто считаю необходимым извлечь один столбец значений, и в этом случае вы можете указать отдельный столбец с помощью .to_string, используя следующее:

data = pd.DataFrame({'col1': np.random.randint(0, 100, 10), 
    'col2': np.random.randint(50, 100, 10), 
    'col3': np.random.randint(10, 10000, 10)})

print(data.to_string(columns=['col1'], index=False)

print(data.to_string(columns=['col1', 'col2'], index=False))

Который обеспечивает легкий для копирования (и без индекса) вывод для использования в другом месте (Excel). Пример вывода:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.