提取pandas中数据帧的第一行和最后一行

Bry*_*n P 35 python pandas

如何将给定数据帧的第一行和最后一行作为pandas中的新数据帧提取?

我试图用来iloc选择所需的行,然后concat如下所示:

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

但是这不会产生一个熊猫数据帧:

a    1
b    a
a    4
b    d
dtype: object
Run Code Online (Sandbox Code Playgroud)

su7*_*u7k 68

我认为最简单的方法是.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
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果框架仅包含一行,则它将复制第一行 (2认同)

Col*_*vel 29

您还可以使用headtail:

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

  • 我认为这是最好的解决方案,因为它适用于一切。当尝试在帧的切片上使用“.iloc”时,我收到“索引位置超出范围”错误(随着索引的变化,这是有意义的),我不想“reset_index”,因为当前索引很重要 (3认同)

joh*_*mue 17

如果框架仅包含一行,则接受的答案将复制第一行。如果这是一个问题

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
Run Code Online (Sandbox Code Playgroud)

而这样做:

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

print df3 

   a  b
0  1  a
0  1  a
Run Code Online (Sandbox Code Playgroud)

因为单行同时是第一行和最后一行。


jez*_*ael 8

我认为你可以尝试添加参数axis=1到,因为和 的concat输出是并转置为:df.iloc[0,:]df.iloc[-1,:]SeriesT

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
Run Code Online (Sandbox Code Playgroud)