["python","pandas"]
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
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.