2016-04-11 15 views
11

Come posso estrarre la prima e l'ultima riga di un dato datagramma come un nuovo dataframe nei panda?Estrarre la prima e l'ultima riga di un dataframe nei panda

Ho cercato di usare iloc per selezionare le righe desiderate e poi concat come in:

df=pd.DataFrame({'a':range(1,5), 'b':['a','b','c','d']}) 
pd.concat([df.iloc[0,:], df.iloc[-1,:]]) 

ma questo non produce un dataframe panda:

a 1 
b a 
a 4 
b d 
dtype: object 

risposta

24

Penso che il modo più semplice sia .iloc[[0, -1]].

df = pd.DataFrame({'a':range(1,5), 'b':['a','b','c','d']}) 
df2 = df.iloc[[0, -1]] 

print df2 

    a b 
0 1 a 
3 4 d 
+0

Ah perfetto. Sapeva che ci doveva essere un modo con l'indicizzazione semplice. –

+0

Soluzione molto bella. :) – jezrael

4

penso che si può prova ad aggiungere il parametro axis=1 a concat, perché l'output di df.iloc[0,:] e df.iloc[-1,:] è Series e traspone da T:

print df.iloc[0,:] 
a 1 
b a 
Name: 0, dtype: object 

print df.iloc[-1,:] 
a 4 
b d 
Name: 3, dtype: object 

print pd.concat([df.iloc[0,:], df.iloc[-1,:]], axis=1) 
    0 3 
a 1 4 
b a d 

print pd.concat([df.iloc[0,:], df.iloc[-1,:]], axis=1).T 
    a b 
0 1 a 
3 4 d 
10

È anche possibile utilizzare head e tail:

In [29]: pd.concat([df.head(1), df.tail(1)]) 
Out[29]: 
    a b 
0 1 a 
3 4 d 
Problemi correlati