Cara mencetak panda DataFrame tanpa indeks

170

Saya ingin mencetak seluruh kerangka data, tetapi saya tidak ingin mencetak indeks

Selain itu, satu kolom adalah tipe datetime, saya hanya ingin mencetak waktu, bukan tanggal.

Kerangka data terlihat seperti:

   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

Saya ingin mencetak sebagai

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041
lserlohn
sumber
1
Anda menggunakan terminologi ("data frame", "index") yang membuat saya berpikir Anda benar-benar bekerja di R, bukan Python. Mohon klarifikasi. Apapun, kita perlu melihat kode yang ada yang mencetak "kerangka data" ini untuk memiliki kesempatan sama sekali untuk dapat membantu. Silakan baca dan ikuti instruksi di stackoverflow.com/help/mcve
zwol
... Saya akan mengatakan bahwa jika ini sebenarnya Python dan itu adalah datetime.datetimeobjek di kolom kedua, maka Anda dapat mencetak waktu menggunakan strftimemetode, dengan format string yang sesuai (mungkin "%H:%M:%S").
zwol
17
@Zack: DataFrameadalah nama struktur data 2D di pandas, pustaka analisis data Python yang populer.
DSM

Jawaban:

217
print df.to_string(index=False)
Pavol Zibrita
sumber
9
Ini bagus, namun tidak mengandung tab-sep lagi yang merupakan cacat ketika menyalin ke excel
Rockbar
7
@Rockbar jika Anda ingin menyalin / mengekspor ke excel Anda tetap harus menggunakan df.to_csv.
U2EF1
3
Bagi saya label kolom keluar tidak dibenarkan untuk data (ada spasi yang hilang di awal). Mungkin karena data saya mengambil lebih banyak karakter daripada label kolom. Menambahkan argumen justify = 'left' memperbaikinya, meskipun jelas mengubah keselarasan label kolom.
ErnestScribbler
1
Anda juga bisa menggunakan df.to_clipboard()dan menempelkan ke Excel. Berguna untuk berurusan dengan BS "Anda tidak dapat mengedit dokumen terbuka" Windows.
BallpointBen
df.to_excel('filename.xlsx', index=False)
Sonicsmooth
30
print(df.to_csv(sep='\t', index=False))

Atau mungkin:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
U2EF1
sumber
3
Bagaimana ini mungkin karena DataFrame.to_csv tidak memiliki nilai balik? Saya hanya mendapatkan Tidak ada yang dicetak.
jung rhew
Memang, OP diminta untuk mencetak. Komentar ini tidak mencetak kerangka data, tetapi menyimpannya ke CSV sebagai gantinya.
Paul
24

Baris di bawah ini akan menyembunyikan kolom indeks DataFrame saat Anda mencetak

df.style.hide_index()
AnarchistGeek
sumber
8
Membutuhkan paket jinja2 dan tidak menghasilkan output yang diinginkan dengan Python 3.7
PeterXX
1
Saya menemukan jawaban ini paling efektif untuk menyalin / menempel ke tabel ketika membuat laporan, terima kasih!
leas
8

Jika Anda ingin cukup mencetak frame data, maka Anda dapat menggunakan paket tabulasi .

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)

Secara khusus, itu showindex=False, seperti namanya, memungkinkan Anda untuk tidak menampilkan indeks. Output akan terlihat sebagai berikut:

+--------+--------+--------+
|   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 |
+--------+--------+--------+
kingmakerking
sumber
8

Untuk mempertahankan penggunaan "cetak cantik"

from IPython.display import HTML
HTML(df.to_html(index=False))

masukkan deskripsi gambar di sini

Antony Hatchkins
sumber
4

Jika Anda hanya ingin string / json mencetaknya dapat diselesaikan dengan:

print(df.to_string(index=False))

Namun jika Anda ingin membuat serial data juga atau bahkan mengirim ke MongoDB, akan lebih baik untuk melakukan sesuatu seperti:

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

Ada 6 cara sekarang untuk mengarahkan data, periksa lebih banyak di dokumen panda yang lebih cocok untuk Anda.

Ziul
sumber
4

Untuk menjawab pertanyaan "Bagaimana cara mencetak dataframe tanpa indeks", Anda dapat mengatur indeks menjadi array string kosong (satu untuk setiap baris dalam dataframe), seperti ini:

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

Jika kami menggunakan data dari pos Anda:

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)

yang biasanya dicetak sebagai:

   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

Dengan membuat array dengan sebanyak mungkin string kosong yang ada di bingkai data:

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

Ini akan menghapus indeks dari output:

  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

Dan di Jupyter Notebooks akan ditampilkan sesuai tangkapan layar ini: Dataframe Notebook Juptyer tanpa kolom indeks

roj
sumber
Meskipun sedikit aneh, ini adalah solusi terbaik di sini IMO.
Corel
0

Mirip dengan banyak jawaban di atas yang menggunakan df.to_string (index = False), saya sering merasa perlu untuk mengekstrak satu kolom nilai yang dalam hal ini Anda dapat menentukan satu kolom dengan .to_string menggunakan yang berikut:

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))

Yang memberikan output yang mudah disalin (dan bebas indeks) untuk digunakan menempel di tempat lain (Excel). Output sampel:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
BigTom
sumber