Pandas DataReader生成的DataFrame索引无法访问问题求助
解决Pandas DataReader拉取数据后无法通过索引访问的问题
我之前也碰到过一模一样的情况,问题出在DataFrame的行索引访问方式和索引的实际数据类型上,咱们一步步来解决:
1. 先搞清楚你为什么访问失败
你可能尝试用了tdata['2018-03-23']这种方式,但对DataFrame来说,直接用方括号[]是用来访问列的,而不是行!你的列名是open、high这些,自然找不到名为2018-03-23的列,会报KeyError。
另外,虽然tdata.index.values显示的是字符串数组['2018-03-23'],但实际你的索引很可能是DatetimeIndex类型(而不是普通字符串),直接用字符串访问有时候会因为格式匹配问题失效。
2. 正确的访问方法
方法一:用.loc[]按标签访问行
这是Pandas中按行索引标签访问的标准方式,直接传入日期字符串即可:
# 获取指定日期的行数据 target_row = tdata.loc['2018-03-23'] print(target_row)
输出应该是:
open 264.17 high 265.02 low 257.83 close 258.05 volume 183534751 Name: 2018-03-23 00:00:00, dtype: float64
方法二:转成datetime对象访问(更可靠)
如果你的索引是DatetimeIndex类型,把日期字符串转成datetime对象再访问,能避免格式不匹配的问题:
import pandas as pd # 把目标日期转成datetime对象 target_date = pd.to_datetime('2018-03-23') # 用datetime对象访问行 target_row = tdata.loc[target_date] print(target_row)
3. 验证你的索引类型
你可以先确认下索引的实际类型,执行下面的代码:
print(type(tdata.index))
如果输出是<class 'pandas.core.indexes.datetimes.DatetimeIndex'>,就说明索引是datetime类型,用上面的方法二会更稳妥;如果是<class 'pandas.core.indexes.base.Index'>(object类型的字符串索引),方法一就完全够用。
内容的提问来源于stack exchange,提问作者Booker T Wyckoff
相关产品推荐
相关产品推荐

