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

Pandas DataFrame遇AttributeError与KeyError的问题求解

解决Pandas中Date列设为索引后的属性访问与行选择错误

先还原下你的操作场景:
你执行了以下代码读取数据并将Date设为索引:

import pandas as pd 
df= pd.read_csv("RELIANCE.csv",parse_dates=['Date'], index_col=['Date']) 
df.head(2)

得到的输出显示Date已经成为了DataFrame的行索引,而不再是普通列:

Open High Low Close Adj Close Volume
Date
2019-08-19 1281.050049 1296.800049 1280.000000 1292.599976 1287.764648 7459859.0
2019-08-20 1289.800049 1292.599976 1272.599976 1275.949951 1271.176880 6843460.0

接下来你遇到了两个错误,我逐一给你解释和解决:

1. 解决AttributeError: 'DataFrame' object has no attribute 'Date'

这个错误的核心原因是:你已经通过index_col=['Date']把Date列设置成了DataFrame的行索引,它不再是DataFrame的普通列,自然不能用df.Date或者df['Date']来访问。

要查看索引中第一个元素的类型,你需要直接访问索引对象:

# 查看索引第一个元素的类型
type(df.index[0])

这样就能得到正确的pandas._libs.tslibs.timestamps.Timestamp类型(本质是datetime64的封装)。如果之后你需要把Date重新变回普通列,可以用:

# 将索引还原为普通列
df = df.reset_index()
# 此时就能正常访问Date列了
type(df.Date[0])

2. 解决KeyError: '2019-08-19'

当Date是DatetimeIndex时,直接用df['2019-08-19']会被Pandas理解为查找列名是'2019-08-19'的列,但你的列是Open、High这些,所以会抛出KeyError。

要选择指定日期的行,你需要用.loc索引器(专门用于标签索引):

# 选择2019-08-19这一行
df.loc['2019-08-19']

如果需要选择日期范围,还可以用切片:

# 选择2019-08-19到2019-08-20的所有行
df.loc['2019-08-19':'2019-08-20']

另外,如果你想确保精确匹配日期,也可以传入Timestamp对象:

df.loc[pd.Timestamp('2019-08-19')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:27:43