Panda DataFrame dizini olmadan nasıl yazdırılır


170

Tüm veri çerçevesini yazdırmak istiyorum, ancak dizini yazdırmak istemiyorum

Ayrıca, bir sütun datetime türüdür, sadece tarih yazdırmak değil, zamanı yazdırmak istiyorum.

Veri çerçevesi şöyle görünür:

   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

Olarak yazdırılmasını istiyorum

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

1
Python'da değil, aslında R'de çalıştığınızı düşündüren terminoloji ("veri çerçevesi", "dizin") kullanıyorsunuz. Lütfen açıkla. Ne olursa olsun, yardım edebilme şansı elde etmek için bu "veri çerçevesini" basan mevcut kodu görmemiz gerekiyor. Lütfen stackoverflow.com/help/mcve
zwol

... Bu aslında Python ise ve bunlar datetime.datetimeikinci sütundaki nesneler ise, strftimeuygun bir biçim dizesiyle (muhtemelen "%H:%M:%S") yöntemi kullanarak sadece zamanı yazdırabileceğinizi söyleyeceğim .
zwol

18
@Zack: popüler bir Python veri analiz kütüphanesi DataFrameolan 2B veri yapısının adıdır pandas.
DSM

Yanıtlar:


217
print df.to_string(index=False)

9
Bu güzel, ancak excel kopyalarken bir handikap daha fazla artık tab-sep içermiyor
Rockbar

7
@Rockbar kopyalamak / dışa aktarmak istiyorsanız excel df.to_csvzaten kullanmalısınız .
U2EF1

3
Benim için sütun etiketleri veriye haklı çıkmadı (başlangıçta eksik boşluklar var). Belki de verilerim sütun etiketinden daha fazla karakter içerdiğinden. Justify = 'left' bağımsız değişkenini eklemek sorunu düzeltir, ancak sütun etiketlerinin hizalamasını açıkça değiştirir.
ErnestScribbler

1
Ayrıca kullanabilir df.to_clipboard()ve sonra Excel'e yapıştırabilirsiniz. Windows'un aptal "açık bir belgeyi düzenleyemezsiniz" BS ile başa çıkmak için kullanışlıdır.
BallpointBen

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

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

Veya muhtemelen:

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

3
DataFrame.to_csv'nin bir dönüş değeri olmadığından bu nasıl mümkün olabilir? Sadece Hiçbiri yazdırılmıyor.
jung

Gerçekten OP yazdı. Bu yorum veri çerçevesini yazdırmaz, bunun yerine CSV'ye kaydeder.
Paul

24

Aşağıdaki satır, yazdırdığınızda DataFrame'in dizin sütununu gizleyecektir

df.style.hide_index()

8
Jinja2 paketi gerektirir ve Python 3.7 ile istenen çıktıyı üretmez
PeterXX

1
Bu cevabın, rapor hazırlarken bir tabloya kopyalamak / yapıştırmak için en etkili olduğunu düşünüyorum, teşekkür ederim!
kiralar

8

Veri çerçevelerini güzel yazdırmak istiyorsanız, tablo paketini kullanabilirsiniz .

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)

Özellikle, showindex=Falseadından da anlaşılacağı gibi, dizin göstermenize izin vermez. Çıktı aşağıdaki gibi görünecektir:

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

"Güzel yazdır" özelliğini korumak için

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

resim açıklamasını buraya girin


4

Sadece bir dize / json yazdırmak istiyorsanız şu şekilde çözülebilir:

print(df.to_string(index=False))

Verileri de serileştirmek veya hatta bir MongoDB'ye göndermek istiyorsanız, buf gibi bir şey yapmak daha iyi olurdu:

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

Verileri yönlendirmenin 6 yolu vardır, panda dokümanlarında size daha iyi uyan daha fazla kontrol edin .


4

"Dizin olmadan veri çerçevesi nasıl yazdırılır" sorusunu yanıtlamak için, dizini boş dizelerden oluşan bir dizi (veri çerçevesindeki her satır için bir tane) olacak şekilde ayarlayabilirsiniz:

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

Gönderinizdeki verileri kullanırsak:

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)

normal olarak şu şekilde yazdırılır:

   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

Veri çerçevesinde satır sayısı kadar boş dizeye sahip bir dizi oluşturarak:

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

Dizini çıktıdan kaldıracaktır:

  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

Ve Jupyter Defterler bu ekran görüntüsü başına render olurdu: dizin sütunu olmayan Juptyer Notebooks veri çerçevesi


Biraz garip olmasına rağmen, bu IMO'nun en iyi çözümü.
Corel

0

Yukarıdaki df.to_string (index = False) kullanan cevapların çoğuna benzer şekilde, genellikle tek bir değer sütunu ayıklamak için gerekli buluyorum, bu durumda aşağıdakileri kullanarak .to_string ile ayrı bir sütun belirtebilirsiniz:

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

Başka bir yere yapıştırma (Excel) için kopyalaması kolay (ve indekssiz) çıktı sağlar. Örnek çıktı:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.