So drucken Sie Pandas DataFrame ohne Index

169

Ich möchte den gesamten Datenrahmen drucken, aber ich möchte nicht den Index drucken

Außerdem ist eine Spalte vom Typ Datum / Uhrzeit. Ich möchte nur die Uhrzeit und nicht das Datum drucken.

Der Datenrahmen sieht folgendermaßen aus:

   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

Ich möchte, dass es als gedruckt wird

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041
lserlohn
quelle
1
Sie verwenden eine Terminologie ("Datenrahmen", "Index"), die mich glauben lässt, dass Sie tatsächlich in R arbeiten, nicht in Python. Bitte klären Sie. Unabhängig davon müssen wir den vorhandenen Code sehen, der diesen "Datenrahmen" druckt, um überhaupt eine Chance zu haben, helfen zu können. Bitte lesen und befolgen Sie die Anweisungen unter stackoverflow.com/help/mcve
zwol
... Ich werde sagen, wenn dies tatsächlich Python ist und dies datetime.datetimeObjekte in der zweiten Spalte sind, können Sie mit der strftimeMethode (wahrscheinlich "%H:%M:%S") nur die Zeit mit der Methode drucken .
zwol
17
@Zack: DataFrameist der Name der 2D-Datenstruktur in pandaseiner beliebten Python-Datenanalysebibliothek.
DSM

Antworten:

214
print df.to_string(index=False)
Pavol Zibrita
quelle
8
Das ist schön, aber es enthält nicht mehr das Tab-Sep, was mehr als ein Handicap beim Kopieren ist, um zu übertreffen
Rockbar
7
@Rockbar Wenn Sie kopieren / exportieren möchten, um Excel zu erstellen, sollten Sie es df.to_csvtrotzdem verwenden.
U2EF1
3
Für mich sind die Spaltenbeschriftungen nicht gerechtfertigt für die Daten (am Anfang fehlen Leerzeichen). Möglicherweise, weil meine Daten mehr Zeichen als die Spaltenbezeichnung enthalten. Durch Hinzufügen des Arguments rechtfertigen = 'links' wird das Problem behoben, obwohl offensichtlich die Ausrichtung der Spaltenbeschriftungen geändert wird.
ErnestScribbler
1
Sie können auch df.to_clipboard()Excel verwenden und dann in Excel einfügen. Nützlich für den Umgang mit Windows 'dummem BS "Sie können ein offenes Dokument nicht bearbeiten".
BallpointBen
df.to_excel('filename.xlsx', index=False)
Sonicsmooth
29
print(df.to_csv(sep='\t', index=False))

Oder möglicherweise:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
U2EF1
quelle
3
Wie ist dies möglich, da DataFrame.to_csv keinen Rückgabewert hat? Ich bekomme nur keine ausgedruckt.
Jung Rhew
In der Tat bat OP um Druck. Dieser Kommentar druckt den Datenrahmen nicht, sondern speichert ihn stattdessen in CSV.
Paul
24

In der folgenden Zeile wird die Indexspalte von DataFrame beim Drucken ausgeblendet

df.style.hide_index()
AnarchistGeek
quelle
8
Benötigt jinja2 Paket und erzeugt nicht die gewünschte Ausgabe mit Python 3.7
PeterXX
1
Ich finde, diese Antwort ist am effektivsten, wenn Sie einen Bericht erstellen / in eine Tabelle einfügen. Vielen Dank!
Leas
8

Wenn Sie die Datenrahmen hübsch drucken möchten, können Sie das tabellarische Paket verwenden.

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)

Insbesondere showindex=Falsekönnen Sie, wie der Name schon sagt, keinen Index anzeigen. Die Ausgabe würde wie folgt aussehen:

+--------+--------+--------+
|   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 |
+--------+--------+--------+
Königsmachen
quelle
8

Um "Pretty-Print" beizubehalten, verwenden Sie

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

Geben Sie hier die Bildbeschreibung ein

Antony Hatchkins
quelle
4

Wenn Sie nur einen String / JSON drucken möchten, können Sie dies lösen mit:

print(df.to_string(index=False))

Buf, wenn Sie die Daten auch serialisieren oder sogar an eine MongoDB senden möchten, ist es besser, etwas zu tun wie:

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

Es gibt jetzt 6 Möglichkeiten, die Daten zu orientieren. Weitere Informationen finden Sie in den Panda-Dokumenten, die besser zu Ihnen passen .

Ziul
quelle
3

Um die Frage "So drucken Sie einen Datenrahmen ohne Index" zu beantworten, können Sie den Index wie folgt auf ein Array leerer Zeichenfolgen festlegen (eine für jede Zeile im Datenrahmen):

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

Wenn wir die Daten aus Ihrem Beitrag verwenden:

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)

die normalerweise als drucken würde:

   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

Durch Erstellen eines Arrays mit so vielen leeren Zeichenfolgen, wie Zeilen im Datenrahmen vorhanden sind:

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

Der Index wird aus der Ausgabe entfernt:

  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

Und in Jupyter würden Notebooks gemäß diesem Screenshot gerendert : Juptyer Notebooks-Datenrahmen ohne Indexspalte

roj
quelle
Obwohl es ein bisschen komisch ist, ist dies hier IMO die beste Lösung.
Corel
0

Ähnlich wie bei vielen der obigen Antworten, die df.to_string (index = False) verwenden, ist es häufig erforderlich, eine einzelne Wertespalte zu extrahieren. In diesem Fall können Sie eine einzelne Spalte mit .to_string wie folgt angeben:

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

Dies bietet eine einfach zu kopierende (und indexfreie) Ausgabe zum Einfügen an anderer Stelle (Excel). Beispielausgabe:

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