在pandas中,如何选择第二行,除非只有一行(在这种情况下,应该返回该行)?

nwwlzxa7  于 2023-03-21  发布在  其他
关注(0)|答案(5)|浏览(187)

我有一个n行的 Dataframe 。
我想选择第二行,除非只有一行时我想选择该行。
以下是一些虚拟数据:

import pandas as pd
df=pd.DataFrame(range(20,28),columns=["day"])
df.sort_values("day",ascending=True,inplace=True)
df

我尝试过的事情:

df.head(2).tail(1)

这对于n = 1失败-例如

df.head(1).iloc[1]

IndexError:单个位置索引器超出界限
一如既往的感谢

xpszyzbs

xpszyzbs1#

您可以用途:

row = df.iloc[min(len(df), 2)-1]

输出:

day    21
Name: 1, dtype: int64
2ekbmq32

2ekbmq322#

用途:

df.iloc[1] if len(df) > 1 else df.iloc[0]

如果需要一行 Dataframe :

df.iloc[[1]] if len(df) > 1 else df.iloc[[0]]

不含if-else的解决方案是获取第二行并乘以条件-如果为True,则选择第一行:

for i in range(1,5):
    df = df2.head(i)
    
    df1 = df.iloc[1 * (len(df) > 1)]
    #ig again call Head and tail it working too
    #df1 = df.head(2).tail(1)
    print (df1)
    
day    20
Name: 0, dtype: int64
day    21
Name: 1, dtype: int64
day    21
Name: 1, dtype: int64
day    21
Name: 1, dtype: int64
pu3pd22g

pu3pd22g3#

如果你考虑到

for i in range(1,5):
    print(df.head(i).iloc[:2].iloc[-1].day)

应打印:

20
21
21
21

这就是你(我)想要的。

k3bvogb1

k3bvogb14#

我们可以写一个条件来检查长度
然后我们可以使用ILOC来查询它
iloc语法- iloc[行,列]

if len(df)>1:#if more than 1 rows
    print(df.iloc[1,:])# It will print 2nd row and all the columns
else:
    print(df.iloc[-1,:]) # if only 1 row it will print the last row

rpppsulh

rpppsulh5#

我会使用一个简单的try/except块,如下所示

try:
   row = df.iloc[1]
except IndexError:
   row = df.iloc[0]

相关问题