Cómo imprimir pandas DataFrame sin índice


170

Quiero imprimir todo el marco de datos, pero no quiero imprimir el índice

Además, una columna es el tipo de fecha y hora, solo quiero imprimir la hora, no la fecha.

El marco de datos se ve así:

   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

Lo quiero imprimir como

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

1
Está utilizando terminología ("marco de datos", "índice") que me hace pensar que realmente está trabajando en R, no en Python. Por favor aclarar De todos modos, necesitamos ver el código existente que imprime este "marco de datos" para tener alguna posibilidad de poder ayudar. Lea y siga las instrucciones en stackoverflow.com/help/mcve
zwol

... Diré que si esto es realmente Python y esos son datetime.datetimeobjetos en la segunda columna, entonces puede imprimir solo el tiempo usando el strftimemétodo, con una cadena de formato apropiada (probablemente "%H:%M:%S").
zwol

17
@Zack: DataFramees el nombre de la estructura de datos 2D en pandasuna popular biblioteca de análisis de datos de Python.
DSM

Respuestas:


217
print df.to_string(index=False)

9
Esto es bueno, sin embargo, ya no contiene el tab-sep que es más que una desventaja al copiar para sobresalir
Rockbar

77
@Rockbar si quieres copiar / exportar a Excel, deberías usarlo de df.to_csvtodos modos.
U2EF1

3
Para mí, las etiquetas de las columnas no están justificadas para los datos (faltan espacios al inicio). Tal vez porque mis datos ocupan más caracteres que la etiqueta de la columna. Agregar el argumento justify = 'left' lo arregla, aunque obviamente cambia la alineación de las etiquetas de las columnas.
ErnestScribbler

1
También puede usar df.to_clipboard()y luego pegar en Excel. Útil para tratar con la estúpida BS de Windows "no puedes editar un documento abierto".
BallpointBen

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

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

O posiblemente:

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

3
¿Cómo es esto posible ya que DataFrame.to_csv no tiene un valor de retorno? Solo recibo Ninguno impreso.
jung rhew

De hecho, OP pidió imprimir. Este comentario no imprime el marco de datos, sino que lo guarda en CSV.
Paul

24

La línea a continuación ocultaría la columna de índice de DataFrame cuando imprima

df.style.hide_index()

8
Requiere el paquete jinja2 y no produce el resultado deseado con Python 3.7
PeterXX

1
Creo que esta respuesta es más efectiva para copiar / pegar en una tabla al hacer un informe, ¡gracias!
Leas

8

Si desea imprimir bastante los marcos de datos, puede usar el paquete tabulado .

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)

Específicamente, el showindex=False, como su nombre lo indica, le permite no mostrar el índice. El resultado sería el siguiente:

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

Para conservar el uso de "impresión bonita"

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

ingrese la descripción de la imagen aquí


4

Si solo desea que se imprima una cadena / json, se puede resolver con:

print(df.to_string(index=False))

Buf si desea serializar los datos también o incluso enviarlos a un MongoDB, sería mejor hacer algo como:

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

Hay 6 formas de orientar los datos, verifique más en los documentos de panda que mejor se adapten a usted.


4

Para responder la pregunta "Cómo imprimir un marco de datos sin un índice", puede configurar el índice para que sea una matriz de cadenas vacías (una para cada fila en el marco de datos), de esta manera:

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

Si usamos los datos de su publicación:

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)

que normalmente se imprimiría como:

   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

Al crear una matriz con tantas cadenas vacías como filas en el marco de datos:

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

Eliminará el índice de la salida:

  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

Y en Jupyter Notebooks se representaría según esta captura de pantalla: marco de datos de Juptyer Notebooks sin columna de índice


A pesar de ser un poco extraño, esta es la mejor solución aquí en mi opinión.
Corel

0

Similar a muchas de las respuestas anteriores que usan df.to_string (index = False), a menudo encuentro necesario extraer una sola columna de valores, en cuyo caso puede especificar una columna individual con .to_string usando lo siguiente:

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

Lo que proporciona una salida fácil de copiar (y sin índice) para usar pegar en otro lugar (Excel). Salida de muestra:

col1  col2    
49    62    
97    97    
87    94    
85    61    
18    55
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.