Estoy buscando la mejor manera de obtener una vista previa rápida de la primera y última N filas de un DataFrame al mismo tiempo.

Me doy cuenta de que puedo usar df.head (N) y df.tail (N) por separado, pero esto devuelve dos marcos de datos. ¿Es mejor simplemente llamar a estas 2 funciones separadas y concatenar las dos, o hay un método más simple para esto?

Actual:

df.head(5)     # first 5 rows
df.tail(5)     # last 5 rows

Deseada:

df.headtail(5)     # 10 rows total

Me gustaría mostrar las primeras y últimas 5 filas como un solo DataFrame para obtener una vista previa rápida del 'rango' de mi conjunto de datos.

2
August W. Gruneisen 6 oct. 2019 a las 22:56

3 respuestas

La mejor respuesta

Aquí hay otra manera:

df = pd.DataFrame({'item': range(100)})
sliced_df = df.head(5)
sliced_df = sliced_df.append(df.tail(5))
print (sliced_df)
# output 
     item
0     0
1     1
2     2
3     3
4     4
95   95
96   96
97   97
98   98
99   99
0
Life is complex 6 oct. 2019 a las 20:18

Simple con .iloc y construya un segmento a partir de range

Muestra:

np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 999, 100).reshape(20,5), columns=list('ABCDE'))

Out[240]:
      A    B    C    D    E
0   684  559  629  192  835
1   763  707  359    9  723
2   277  754  804  599   70
3   472  600  396  314  705
4   486  551   87  174  600
5   849  677  537  845   72
6   777  916  115  976  755
7   709  847  431  448  850
8    99  984  177  755  797
9   659  147  910  423  288
10  961  265  697  639  544
11  543  714  244  151  675
12  510  459  882  183   28
13  802  128  128  932   53
14  901  550  488  756  273
15  335  388  617   42  442
16  543  888  257  321  937
17   57  291  870  119  779
18  430   82   91  896  398
19  611  565  908  633  938

head_tail_slice = list(range(5))+list(range(-5,0))

df.iloc[head_tail_slice]

Out[242]:
      A    B    C    D    E
0   684  559  629  192  835
1   763  707  359    9  723
2   277  754  804  599   70
3   472  600  396  314  705
4   486  551   87  174  600
15  335  388  617   42  442
16  543  888  257  321  937
17   57  291  870  119  779
18  430   82   91  896  398
19  611  565  908  633  938
0
Andy L. 6 oct. 2019 a las 21:12

print(df.to_string(max_rows=10))

Ejemplo:

>>> df = pd.DataFrame({'one': range(100)})
>>> print(df.to_string(max_rows=10))                                          
    one
0     0
1     1
2     2
3     3
4     4
..  ...
95   95
96   96
97   97
98   98
99   99

Del mismo modo, puede configurar max_cols

Una versión un poco menos agradable (en mi humilde opinión) que devuelve una porción del marco de datos:

df.iloc[[*range(5), *range(-5, 0)]]

1
Marat 6 oct. 2019 a las 20:36
58260771