🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

聚宽平台 Pandas DataFrame 遍历:itertuples() 如何正确提取 Index 日期

joinquant | 发布时间: 2026/6/8
以下内容由 EasyQuant 生成。

问题描述

DataFrame数据,index是日期如何取出每行的日期?

聚宽中的DataFrame结构数据,index是日期,用itertuples遍历行时,如何取出每行的日期?
初次接触,python基础不足,网络查了资料也无法解决。在此,请教各位高手指点!谢谢!

df=get_price('000068.XSHE',count=20, frequency='daily', fields=('open', 'high', 'low', 'close','volume'),
end_date='2020-11-26',skip_paused=False, fq='pre',fill_paused=True,panel=False)

#获取列表形式,python标准的有dict构成的列表数据,包含有成交量信息
print(df)
for row in df.itertuples():
print(row)#这是迭代后每一个的数据形式

#问题:我想取出index中的日期,比如2020-10-30,以字符串形式打印,结果显示不出来
#结果是:< built-in method index of Pandas object at 0x7f8a205c4e80>
print(row.index)
print('-'*30,'一行遍历完','-'*30)

解决方案

你好!这个问题是因为在 Python 中,itertuples() 返回的是一个 namedtuple(命名元组)。

在 Python 的元组(tuple)对象中,自带了一个名为 index() 的内置方法(用于查找某个元素在元组中的位置)。当你写 row.index 时,Python 调用的是这个内置方法,而不是 DataFrame 的索引。

在 Pandas 的 itertuples() 中,为了避免与内置方法冲突,DataFrame 的索引(Index)被默认命名为大写的 Index

解决方法

你需要使用大写的 row.Index 来获取日期。同时,因为获取到的是 Pandas 的 Timestamp 对象,你可以使用 .strftime('%Y-%m-%d') 将其转换为你想要的字符串格式。

修正后的代码示例

import pandas as pd

# 获取数据
df = get_price('000068.XSHE', count=20, frequency='daily', 
               fields=('open', 'high', 'low', 'close', 'volume'),
               end_date='2020-11-26', skip_paused=False, fq='pre', 
               fill_paused=True, panel=False)

# 遍历 DataFrame
for row in df.itertuples():
    # 使用大写的 Index 获取日期对象
    date_obj = row.Index
    
    # 将日期对象格式化为字符串
    date_str = date_obj.strftime('%Y-%m-%d')
    
    print("当前日期字符串:", date_str)
    print("开盘价:", row.open)
    print('-'*30, '一行遍历完', '-'*30)

补充:另一种遍历方法 iterrows()

除了 itertuples(),你也可以使用 iterrows(),它会直接将 index 和 row 数据分开返回,对于初学者可能更直观(尽管在处理极大数据量时 itertuples 性能更好):

for index, row in df.iterrows():
    # 这里的 index 直接就是日期对象
    date_str = index.strftime('%Y-%m-%d')
    print("当前日期:", date_str)
    print("收盘价:", row['close'])

总结:记住在 itertuples() 中,索引属性名是首字母大写的 Index 即可解决你的问题!