удалить високосные дни в пандах - PullRequest
0 голосов
/ 05 января 2019

У меня есть кадр данных в пандах, как это:

    ID          Date        Element Data_Value
0   USW00094889 2014-11-12  TMAX    22
1   USC00208972 2009-04-29  TMIN    56
2   USC00200032 2008-05-26  TMAX    278
3   USC00205563 2005-11-11  TMAX    139
4   USC00200230 2014-02-27  TMAX    -106

Я хочу удалить все високосные дни, и мой код

df = df[~((df.Date.month == 2) & (df.Date.day == 29))]

но произошла ошибка AttributeError:

'Series' object has no attribute 'month'

Что не так с моим кодом?

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Добавить dt аксессор, потому что работает с Series, а не с DatetimeIndex:

df = df[~((df.Date.dt.month == 2) & (df.Date.dt.day == 29))]

Или инвертированное условие с цепочкой | для битовых OR и != для не равных:

df = df[(df.Date.dt.month != 2) | (df.Date.dt.day != 29)]

Или используйте strftime для преобразования в MM-DD формат:

df = df[df.Date.dt.strftime('%m-%m') != '02-29'] 
0 голосов
/ 05 января 2019

Другой способ, которым вы можете попробовать ниже, если ваш столбец Date неправильный datetime скорее стр.

df[~df.Date.str.endswith('02-29')]

ИЛИ, если он в формате datetime, даже вы можете попробовать преобразовать в str.

df[~df.Date.astype(str).str.endswith('02-29')]

ИЛИ, Даже использование содержит:

df[~df.Date.str.contains('02-29')]
0 голосов
/ 05 января 2019

Использовать dt accessor:

df = df[~((df.Date.dt.month == 2) & (df.Date.dt.day == 29))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...