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

Pandas中如何在将时间列设为索引后仍可通过行号访问数据?

解决保留Datetime索引时按行号访问数据的问题

嗨,这个问题我之前也碰到过!当你把datetime类型设为DataFrame的索引后,at方法就只能识别这个datetime标签了,没法直接用整数行号访问。不过别担心,有几个简单的办法能满足你的需求,同时保留datetime索引:

方法一:用iloc按位置访问

iloc是pandas专门用来基于整数位置访问数据的工具,完全不受当前索引类型的影响。你可以直接用行号来获取整行或者指定列的数据:

for row_index in range(len(df)):
    # 获取整行数据
    row_data = df.iloc[row_index]
    print(row_data)
    # 如果只需要value列的值
    value = df.iloc[row_index]['value']
    print(value)

简单解释下:iloc[row_index]会直接定位到第row_index行(从0开始计数),不管你的索引是datetime还是其他类型,都能正常工作。

方法二:用iterrows()遍历(适合小数据量场景)

虽然你提到遍历DataFrame不是最佳实践,但如果只是小数据量的需求,iterrows()也能满足。它会返回每一行的**索引标签(这里就是你的datetime值)**和行数据,你可以忽略索引标签只取行数据:

for idx, row in df.iterrows():
    # idx是datetime索引,row是当前行的Series对象
    print(row)
    # 单独获取value列的值
    print(row['value'])

⚠️ 注意:如果数据量很大,优先用pandas的向量化操作(比如df['value'].apply()之类的),效率会比遍历高很多。

为什么原来的at方法会报错?

at是基于**标签(label-based)的索引方法,它只能接受你当前设置的索引类型的值(这里就是datetime对象),所以传入整数行号就会触发类型不匹配的错误。而iloc是专门处理位置(position-based)**访问的工具,正好适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:03