У меня есть набор данных в формате pd из yahoo financial API, и я пытаюсь сделать следующее ... Он не распознает дату в фрейме данных, и я не знаю почему? Не могли бы вы объяснить мне, в чем проблема? Ниже мой код и то, что я пытаюсь сделать.

# import data 
data = pdr.get_data_yahoo('spy', 
                          start=datetime.datetime(2015, 9, 30), 
                          end=datetime.datetime(2021, 5, 15))

train_dates = pd.to_datetime(data['Date'])

Это дает мне следующую ошибку.

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2897             try:
-> 2898                 return self._engine.get_loc(casted_key)
   2899             except KeyError as err:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item()

KeyError: 'Date'

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

KeyError                                  Traceback (most recent call last)
2 frames
/usr/local/lib/python3.7/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2898                 return self._engine.get_loc(casted_key)
   2899             except KeyError as err:
-> 2900                 raise KeyError(key) from err
   2901 
   2902         if tolerance is not None:

KeyError: 'Date'.
0
Maha Al 20 Май 2021 в 18:27

1 ответ

Лучший ответ

Это втягивает дату в индекс. Используя ipython, вы можете увидеть, что индекс уже имеет значение datetime. Если вам нужно вызвать индекс, синтаксис будет другим.

eg: train_dates = pd.to_datetime(data.index)

Вывод Ipython:

In [389]: data = pdr.get_data_yahoo('spy', ^M
     ...:                           start=datetime.datetime(2015, 9, 30), ^M
     ...:                           end=datetime.datetime(2021, 5, 15))

In [390]: data
Out[390]:
              High     Low    Open   Close        Volume  Adj Close
Date
2015-09-30 191.830 189.440 190.370 191.630 163452000.000    172.394
2015-10-01 192.490 189.820 192.080 192.130 131079000.000    172.844
2015-10-02 195.030 189.120 189.770 195.000 211003300.000    175.426
2015-10-05 198.740 196.330 196.460 198.470 126320800.000    178.548
2015-10-06 198.980 197.000 198.310 197.790 110274500.000    177.936
...            ...     ...     ...     ...           ...        ...
2021-05-10 422.740 417.810 422.500 417.940  81852400.000    417.940
2021-05-11 415.270 410.060 413.100 414.210 116888000.000    414.210
2021-05-12 412.590 404.000 411.230 405.410 134811000.000    405.410
2021-05-13 412.350 407.020 407.070 410.280 106394000.000    410.280
2021-05-14 417.490 413.180 413.210 416.580  82123100.000    416.580

[1416 rows x 6 columns]

In [391]: data.dtypes
Out[391]:
High         float64
Low          float64
Open         float64
Close        float64
Volume       float64
Adj Close    float64
dtype: object

In [392]: data.index
Out[392]:
DatetimeIndex(['2015-09-30', '2015-10-01', '2015-10-02', '2015-10-05',
               '2015-10-06', '2015-10-07', '2015-10-08', '2015-10-09',
               '2015-10-12', '2015-10-13',
               ...
               '2021-05-03', '2021-05-04', '2021-05-05', '2021-05-06',
               '2021-05-07', '2021-05-10', '2021-05-11', '2021-05-12',
               '2021-05-13', '2021-05-14'],
              dtype='datetime64[ns]', name='Date', length=1416, freq=None)
0
Jonathan Leon 20 Май 2021 в 15:40