如何打印DataFrame两个索引号之间的行?现有代码最后一行报错如何解决?
问题原因排查
你写的代码报错主要有3个核心问题:
row1、row2是布尔索引筛选得到的Index对象,调用tolist()后得到的是列表类型,但df.iloc[start:end]的切片起止要求传入单个整数,不能直接用列表作为切片参数。- 没有校验匹配结果的唯一性:如果
main列存在多行值为march或august的记录,tolist()后会得到包含多个元素的列表,就算提取元素也无法确定你要取的是哪一个匹配行。 - 你通过
df.index[condition]拿到的是索引标签值,如果你的DataFrame没有使用默认的从零开始连续整数索引,标签值和iloc要求的行位置值不匹配,会出现取数错位的问题。
修正方案
假设你的需求是:main列中march和august各只有一条匹配记录,且march所在行的位置在august之前,要打印这两行及它们中间的所有行,修正后代码如下:
# 分别获取两个匹配行的整数位置(适配iloc的入参要求) pos_march = df.index.get_loc(df[df["main"] == "march"].index[0]) pos_august = df.index.get_loc(df[df["main"] == "august"].index[0]) # iloc切片左闭右开,要包含august所在行的话需要将结束位置+1 result = df.iloc[pos_march : pos_august + 1] print(result)
如果确定你的DataFrame用的是默认连续整数索引,标签和位置完全一致,也可以简化为:
i = df[df["main"] == "march"].index[0] j = df[df["main"] == "august"].index[0] result = df.iloc[i : j + 1] print(result)
内容的提问来源于stack exchange,提问作者Ramesh
相关产品推荐
相关产品推荐

