Во время обработки вышеуказанного исключения произошло другое исключение: «Дата» - PullRequest
0 голосов
/ 20 июня 2020

Фон -

У меня есть DataFrame с двумя столбцами (Дата и Осадки) в следующем формате -

precipitation_df = pd.DataFrame('2016-09-05', NaN), ('2016-09-06', NaN) et c

Цель -
Я хотел бы удалить строки, содержащие значения NaN для диапазона дат 2016-08-24 - 2017-08-24 , но сначала хотел проанализировать, какие даты были затронуты в этом диапазоне. Поэтому я решил создать новый DataFrame, используя этот код, со всеми значениями NaN в диапазоне, который меня интересует -

start_date = '2016-08-23'
end_date = '2017-08-23'

nan_values_df = (precipitation_df['Date'] > start_date) & (df['Date'] <= end_date)

Проблемы -
Когда я запускаю это код, я получаю огромную ошибку, которая ссылается на 'Date':

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/anaconda3/lib/python3.7/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-131-146522d4b445> in <module>
      2 end_date = '2017-08-23'
      3 
----> 4 nan_values_df = (precipitation_df['Date'] > start_date) & (df['Date'] <= end_date)

~/anaconda3/lib/python3.7/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/lib/python3.7/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'

У меня такое чувство, что это может быть связано с форматом даты, но я в тупике и задавался вопросом, может ли кто-нибудь указать мне на в правильном направлении?

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Ваша инструкция относится к df вместо sizes_df .

Но чтобы сделать ваш код короче, более читабельным и менее подверженным таким ошибкам, измените эту инструкцию на :

nan_values_df = precipitation_df.query('@start_date < Date <= @end_date')
0 голосов
/ 20 июня 2020

Думаю, у вас может быть опечатка:

Вы написали:

nan_values_df = (precipitation_df['Date'] > start_date) & (df['Date'] <= end_date)

Но вы должны ссылаться на тот же DataFrame:

nan_values_df = (precipitation_df['Date'] > start_date) & (precipitation_df['Date'] <= end_date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...