You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas的query()方法中直接引用行序数位置获取指定行?

问题背景

首先我们创建示例DataFrame:

import pandas as pd

df_ex = pd.DataFrame(
    {'sales': [10001.35, 12305.22, 11217.89]},
    index=['2022-08-08 00:00:00-04:00', '2022-08-09 00:00:00-04:00', '2022-08-10 00:00:00-04:00']
)
df_ex.index.names = ['date']

当已知目标行的索引值时,我们可以用两种方式通过query()提取第二行:

query_date = '2022-08-09 00:00:00-04:00'

# 通用引用索引
df_ex.query('index == @query_date')

# 或通过索引名显式引用
df_ex.query('date == @query_date')

现在如果仅知道目标行的序数位置(比如idx=1对应第二行),当前的实现是:

idx = 1
query_date = df_ex.iloc[idx].name

df_ex.query('date == @query_date')

疑问:能不能去掉中间获取索引名的步骤,直接在query()的字符串里通过idx值引用行的序数位置?


解答

不能直接在query()的查询字符串里通过序数位置筛选行。因为query()的设计逻辑是基于数据的标签值、列值进行条件筛选,并不支持直接引用行的位置序号。

如果想要更简洁的实现,完全可以跳过query(),直接用iloc定位,这是最直接高效的方式:

idx = 1
df_ex.iloc[[idx]]  # 用双括号保持DataFrame格式,单括号会返回Series

如果一定要使用query(),可以先重置索引把行位置转为列,筛选后再恢复原索引,不过这种写法反而冗余,不如直接用iloc:

idx = 1
df_ex.reset_index().query('index == @idx').set_index('date')

内容的提问来源于stack exchange,提问作者HapiDaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:15:41