pythonpandas

Extract first and last row of a dataframe in pandas


How can I extract the first and last rows of a given dataframe as a new dataframe in pandas?

I've tried to use iloc to select the desired rows and then concat as in:

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

but this does not produce a pandas dataframe:

a    1
b    a
a    4
b    d
dtype: object

Solution

  • Some of the other answers duplicate the first row if the frame only contains a single row. If that's a concern

    df[0::len(df)-1 if len(df) > 1 else 1]

    works even for single row-dataframes.

    Example: For the following dataframe this will not create a duplicate:

    df = pd.DataFrame({'a': [1], 'b':['a']})
    df2 = df[0::len(df)-1 if len(df) > 1  else 1]
    
    print df2
    
       a  b
    0  1  a
    

    whereas this does:

    df3 = df.iloc[[0, -1]]
    
    print df3 
    
       a  b
    0  1  a
    0  1  a
    

    because the single row is the first AND last row at the same time.