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

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)

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

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

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

8

Untuk mempertahankan penggunaan "cetak cantik"

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

masukkan deskripsi gambar di sini


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.


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.