在 Python 中,即使键存在,编译器也会为 datetimeIndex 函数抛出键错误

Posted

技术标签:

【中文标题】在 Python 中,即使键存在,编译器也会为 datetimeIndex 函数抛出键错误【英文标题】:In Python, the complier throws a Key Error for the datetimeIndex function even though the key is present 【发布时间】:2022-01-23 06:13:44 【问题描述】:

所以我正在尝试创建一个每年的标准普尔 500 回报列表,并且我有一个熊猫数据框,其中包含标准普尔指数过去多年的日期和收盘价。 Dates 列的格式为年-月-日,我正在尝试创建一个只有年份的新列。每当我将 datetimeIndex 与参数“Dates”一起使用时,它是数据框列之一,它会引发一个关键错误。有什么提示或建议吗?

代码:

import pandas as pd
import yfinance as yf
import pandas_datareader.data as web
import datetime

df = web.DataReader('^GSPC', 'yahoo', start='1980-1-1', end='2021-1-1')
clear = ['High','Low','Volume', 'Open', 'Close']

df.drop(columns = clear, inplace = True,)
print(df)

df['year'] = pd.DatetimeIndex(df['Date']).year
print(df)

编译器中的数据框:

>>> %Run dff.py
              Adj Close
Date                   
1980-01-02   105.760002
1980-01-03   105.220001
1980-01-04   106.519997
1980-01-07   106.809998
1980-01-08   108.949997
...                 ...
2020-12-24  3703.060059
2020-12-28  3735.360107
2020-12-29  3727.040039
2020-12-30  3732.040039
2020-12-31  3756.070068

[10340 rows x 1 columns]

错误信息:

Traceback (most recent call last):
  File "C:\Users\charlie\AppData\Roaming\Python\Python37\site-packages\pandas\core\indexes\base.py", line 3080, in get_loc
    return self._engine.get_loc(casted_key)
  File "pandas\_libs\index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\index.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc
  File "pandas\_libs\hashtable_class_helper.pxi", line 4554, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas\_libs\hashtable_class_helper.pxi", line 4562, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'Date'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\charlie\Desktop\ISP\dff.py", line 12, in <module>
    df['year'] = pd.DatetimeIndex(df['Date']).year
  File "C:\Users\charlie\AppData\Roaming\Python\Python37\site-packages\pandas\core\frame.py", line 3024, in __getitem__
    indexer = self.columns.get_loc(key)
  File "C:\Users\charlie\AppData\Roaming\Python\Python37\site-packages\pandas\core\indexes\base.py", line 3082, in get_loc
    raise KeyError(key) from err
KeyError: 'Date'

如果错误无法修复,有没有其他方法可以解决?

【问题讨论】:

【参考方案1】:

Date 列是索引,因此您必须通过 df.index 而不是 df['Date']df.Date 来引用它:

试试这个:

df['year'] = pd.DatetimeIndex(df.index).year

【讨论】:

非常感谢它有效!我整天都被困在这个问题上哈哈。只是为了将来,df.index和df['Date']有什么区别?我是 python 新手。 df.index 返回数据帧的索引,无论它可能是什么(日期索引、范围索引等),而df['Date'] 返回Date 列,仅此而已。如果 df 没有 Date 列,则会抛出错误。 既然你是新来的,请看this page ;)

以上是关于在 Python 中,即使键存在,编译器也会为 datetimeIndex 函数抛出键错误的主要内容,如果未能解决你的问题,请参考以下文章

即使不需要模块,Webpack 也会为 node_modules 中的文件提供“模块没有导出的成员...”错误

即使应用程序关闭,Xamarin 也会为数据同步形成后台服务

为啥即使指定了所有值,Spark SQL 也会为字符串列打开可为空?

即使禁用 csrf,Spring Boot 也会为移动请求抛出 403

即使用户有一些播放列表,Spotify Web API 也会为用户播放列表返回空项目

即使我的路由是到不同的文件,express 也会为 index.html 提供服务