Як друкувати панди DataFrame без покажчика


170

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

Крім того, один стовпець - це тип часу, я просто хочу надрукувати час, а не дату.

Рамка даних виглядає так:

   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

Відповіді:


216
print df.to_string(index=False)

8
Це приємно, однак він більше не містить таб-сеп, який є ніж гандикап при копіюванні на
відмінності

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
Я вважаю, що цю відповідь найефективніше копіювати / вставляти в таблицю під час складання звіту, дякую!
лізинг

8

Якщо ви хочете гарненько надрукувати кадри даних, тоді ви можете скористатися табличним пакетом.

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 способів орієнтування даних, перевірте детальніше в документах панда, які краще вам підходять.


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 без стовпчика індексу


Незважаючи на те, що це трохи дивно, це найкраще рішення ІМО.
Корел

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.