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

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)

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

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

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

8

Um "Pretty-Print" beizubehalten, verwenden Sie

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

Geben Sie hier die Bildbeschreibung ein


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 .


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.