Извлечь первую и последнюю строку данных в pandas

Как я могу извлечь первую и последнюю строки данного фрейма данных в качестве нового фрейма данных в pandas?

Я попытался использовать iloc, чтобы выбрать нужные строки, а затем concat, как в:

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

но это не создает фреймворк pandas:

a    1
b    a
a    4
b    d
dtype: object

Ответ 1

Я думаю, что самый простой способ - .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

Ответ 2

Вы также можете использовать head и tail:

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

Ответ 3

Я думаю, вы можете попробовать добавить параметр axis=1 в concat, поскольку вывод df.iloc[0,:] и df.iloc[-1,:] равен Series и транспонируйте 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

Ответ 4

Принятый ответ дублирует первую строку, если кадр содержит только одну строку. Если это беспокойство

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

работает даже для отдельных строк данных.

Для следующего кадра данных это не создаст дубликат:

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

тогда как это делает:

df3 = df.iloc[[0, -1]]

print df3 

   a  b
0  1  a
0  1  a

потому что одна строка - это первая И последняя строка одновременно.