Jak wydrukować pandy DataFrame bez indeksu

170

Chcę wydrukować całą ramkę danych, ale nie chcę drukować indeksu

Poza tym jedna kolumna to typ daty i godziny, chcę tylko wydrukować godzinę, a nie datę.

Ramka danych wygląda następująco:

   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

Chcę wydrukować jako

User ID   Enter Time   Activity Number
123         00:09:00              1411
123         00:18:00               893
123         00:49:00              1041
lserlohn
źródło
1
Używasz terminologii („ramka danych”, „indeks”), która sprawia, że ​​myślę, że pracujesz w języku R, a nie w Pythonie. Proszę o wyjaśnienie. Niezależnie od tego, musimy zobaczyć istniejący kod, który drukuje tę „ramkę danych”, aby mieć jakiekolwiek szanse na pomoc. Przeczytaj i postępuj zgodnie z instrukcjami
podanymi
... Powiem, że jeśli to faktycznie jest Python i są to datetime.datetimeobiekty w drugiej kolumnie, to można wydrukować tylko czas używając strftimemetody, z odpowiednim ciągiem formatu (prawdopodobnie "%H:%M:%S").
zwolni
17
@Zack: DataFrameto nazwa struktury danych 2D w pandaspopularnej bibliotece Python do analizy danych.
DSM,

Odpowiedzi:

216
print df.to_string(index=False)
Pavol Zibrita
źródło
8
To fajne, ale nie zawiera już tab-sep, co jest utrudnieniem podczas kopiowania do programu Excel
Rockbar
7
@Rockbar, jeśli chcesz kopiować / eksportować do programu Excel, i tak powinieneś używać df.to_csv.
U2EF1
3
U mnie etykiety kolumn wychodzą nieuzasadnione do danych (na początku brakuje spacji). Może dlatego, że moje dane zajmują więcej znaków niż etykieta kolumny. Dodanie argumentu justify = 'left' rozwiązuje problem, chociaż oczywiście zmienia wyrównanie etykiet kolumn.
ErnestScribbler
1
Możesz także użyć, df.to_clipboard()a następnie wkleić do programu Excel. Przydatne do radzenia sobie z głupim BS systemu Windows „nie można edytować otwartego dokumentu”.
BallpointBen
df.to_excel('filename.xlsx', index=False)
Sonicsmooth
30
print(df.to_csv(sep='\t', index=False))

Lub ewentualnie:

print(df.to_csv(columns=['A', 'B', 'C'], sep='\t', index=False))
U2EF1
źródło
3
Jak to możliwe, skoro DataFrame.to_csv nie ma wartości zwracanej? Wydrukowano tylko Brak.
jung rhew
Rzeczywiście, OP poprosił o wydrukowanie. Ten komentarz nie drukuje ramki danych, ale zamiast tego zapisuje ją w pliku CSV.
Paweł
24

Poniższa linia spowoduje ukrycie kolumny indeksu DataFrame podczas drukowania

df.style.hide_index()
AnarchistGeek
źródło
8
Wymaga pakietu jinja2 i nie daje oczekiwanych wyników w Pythonie 3.7
PeterXX
1
Uważam, że ta odpowiedź jest najbardziej skuteczna w kopiowaniu / wklejaniu do tabeli podczas tworzenia raportu, dziękuję!
leasing
8

Jeśli chcesz ładnie wydrukować ramki danych, możesz użyć pakietu tabelarycznego .

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)

W szczególności, showindex=Falsejak sama nazwa wskazuje, pozwala nie wyświetlać indeksu. Wynik będzie wyglądał następująco:

+--------+--------+--------+
|   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
źródło
8

Aby zachować użycie „ładnego druku”

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

wprowadź opis obrazu tutaj

Antony Hatchkins
źródło
4

Jeśli chcesz tylko wydrukować string / json, możesz to rozwiązać za pomocą:

print(df.to_string(index=False))

Buf, jeśli chcesz również serializować dane lub nawet wysłać je do MongoDB, lepiej byłoby zrobić coś takiego:

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

Obecnie istnieje 6 sposobów na zorientowanie danych, sprawdź więcej w dokumentach pandy, które lepiej pasują do Ciebie.

Ziul
źródło
4

Aby odpowiedzieć na pytanie „Jak wydrukować ramkę danych bez indeksu”, możesz ustawić indeks jako tablicę pustych ciągów (po jednym dla każdego wiersza w ramce danych), na przykład:

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

Jeśli wykorzystujemy dane z Twojego posta:

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)

który normalnie zostałby wydrukowany jako:

   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

Tworząc tablicę z tyloma pustymi ciągami, ile jest wierszy w ramce danych:

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

Spowoduje to usunięcie indeksu z wyniku:

  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

A w Jupyter Notebooks renderowałby się zgodnie z tym zrzutem ekranu: ramka danych Juptyer Notebooks bez kolumny indeksu

roj
źródło
Pomimo tego, że jest trochę dziwny, jest to najlepsze rozwiązanie tutaj IMO.
Corel
0

Podobnie jak w przypadku wielu powyższych odpowiedzi, które używają df.to_string (index = False), często uważam, że konieczne jest wyodrębnienie pojedynczej kolumny wartości, w którym to przypadku można określić pojedynczą kolumnę za pomocą .to_string, używając następującego polecenia:

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

Zapewnia łatwe do skopiowania (i bez indeksowania) dane wyjściowe do wykorzystania wklejania w innym miejscu (Excel). Przykładowe dane wyjściowe:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
BigTom
źródło