Проблема с использованием date / datetime для создания новых серий с использованием Pandas

#python #pandas #dataframe #datetime #series

#python #pandas #фрейм данных #datetime #Серии

Вопрос:

У меня есть некоторые финансовые данные, с которыми я играю на AWS, просто чтобы узнать что-то новое. Я загрузил эти данные с помощью yfinance модуля. Я не уверен, смогу ли я включить csv-файл с данными, но вот фрагмент df.head(), который, надеюсь, даст вам представление о том, как это выглядит. Это некоторые ежедневные цены, отсортированные по дате в YYYY-MM-DD формате.

В конечном счете, я хотел бы разбить этот фрейм данных на отдельные серии pandas на основе календарных лет. Некоторые поисковые запросы предполагают, что я должен использовать что-то вроде

 df['Date'] = pd.to_datetime(df['Date'], format="%Y-%m-%d")
 

для преобразования в, pd.datetime из которого я должен иметь возможность относительно легко переходить к серии.
Тем не менее, я перепробовал много вариантов этого, но продолжаю получать длинную ошибку обратной трассировки:

 KeyError                                  Traceback (most recent call last)
~/anaconda3/envs/amazonei_mxnet_p36/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2645             try:
-> 2646                 return self._engine.get_loc(key)
   2647             except KeyError:

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'

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-82-c28bc405dae4> in <module>
      3 SP500_df = fill_nan_with_mean(SP500)
      4 
----> 5 df['Date'] = pd.to_datetime(df['Date'], format="%Y-%m-%d")

~/anaconda3/envs/amazonei_mxnet_p36/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2798             if self.columns.nlevels > 1:
   2799                 return self._getitem_multilevel(key)
-> 2800             indexer = self.columns.get_loc(key)
   2801             if is_integer(indexer):
   2802                 indexer = [indexer]

~/anaconda3/envs/amazonei_mxnet_p36/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   2646                 return self._engine.get_loc(key)
   2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2650         if indexer.ndim > 1 or indexer.size > 1:

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'
 

Я не уверен, что делать с этой ошибкой. В настоящее время я думаю, что это, возможно, вызвано либо: i. моей некомпетентностью, ii. что-то, что Date не сохраняется так, как я думаю, что оно сохраняется, и, следовательно, неправильно конвертируется, либо iii. может быть, что-то присущее AWS?

У кого-нибудь есть предложения по поводу того, что здесь может происходить? В противном случае, есть ли у кого-нибудь предложения по каким-либо потенциальным обходным путям, которые позволили бы избежать pd.datetime полного использования?

Заранее спасибо

Комментарии:

1. похоже, что у вашего df есть индекс ‘Date’, а не столбец. вы должны иметь возможность преобразовать это в datetime с помощью df.index = pd.to_datetime(df.index) .

Ответ №1:

MrFuppes верен. Этого было достаточно df.index = pd.to_datetime(df.index) . Я действительно пытался сбросить индекс перед вызовом столбца, и это выдало мне ту же ошибку, но, по крайней мере, это работает.