Панды и свидание.Не удается преобразовать весь столбец в метку времени - PullRequest
0 голосов
/ 27 сентября 2019

Итак, у меня есть проблема.Панды постоянно говорят мне, что

'datetime.date' приведено к дате и времени.В будущем панды не будут вызываться, и TypeError будет возбужден.Чтобы> сохранить текущее поведение, конвертируйте datetime.date в datetime с помощью> pd.Timestamp.Я хотел бы избавиться от этого предупреждения. До сих пор у меня был фрейм данных с некоторыми данными, я занимался фильтрацией и манипуляциями.В какой-то момент у меня есть столбец с датами в формате строки.Меня не волнуют тимзеоны и т. Д. Все дело в точности дня.Я получаю предупреждение, упомянутое выше, когда я конвертирую строки в дату и время, как показано ниже:

df['Some_date'] = pd.to_datetime(df['Some_date'], format='%m/%d/%Y')

Поэтому я попытался сделать что-то подобное:

df['Some_date'] = pd.Timestamp(df['Some_date'])

Но это терпит неудачу, поскольку pd.Timestamp не принимает Серию в качестве аргумента.Я ищу быстрый способ преобразования этих строк в метку времени.

====================================

РЕДАКТИРОВАТЬ

Извините, за путаницу.Я получаю свою ошибку в другом месте.Это происходит, когда я пытаюсь фильтровать свои данные следующим образом: df = df[(df['Some_date'] > firstday)] Где firstday рассчитывается на основе даты и времени.Как здесь:

import datetime

def get_dates_filter():
    lastday = datetime.date.today().replace(day=1) - datetime.timedelta(days=1)
    firstday = lastday.replace(day=1)
    return firstday, lastday

Так что, вероятно, проблема заключается в сравнении двух разных типов представления даты

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Та же проблема - не решение

У меня та же проблема, так как я получаю похожее предупреждение при использовании интерактивных виджетов IPython в jupyter lab.

print(type(df.loc[0, 'Some date']))
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

Но когда я запускаю:

start_date=widgets.DatePicker(value=pd.Timestamp('2016-01-01')), 
end_date=widgets.DatePicker(value=pd.Timestamp('2019-01-01'))

Чтобы показать все значения из df['some date'] за этот период, я получаю то же предупреждение

0 голосов
/ 27 сентября 2019

В пандах даты Python по-прежнему плохо поддерживаются, лучше всего работать с датами без времени.


Если есть даты Python, которые можно преобразовать в строки до to_datetime:

df['Some_date'] = pd.to_datetime(df['Some_date'].astype(str))

При необходимости удалите времена из datetimes в столбце:

df['Some_date'] = pd.to_datetime(df['Some_date'].astype(str)).dt.floor('d')

Тест :

rng = pd.date_range('2017-04-03', periods=3).date
df = pd.DataFrame({'Some_date': rng})  
print (df)
    Some_date
0  2017-04-03
1  2017-04-04
2  2017-04-05

print (type(df.loc[0, 'Some_date']))
<class 'datetime.date'>

df['Some_date'] = pd.to_datetime(df['Some_date'].astype(str))
print (df)
   Some_date
0 2017-04-03
1 2017-04-04
2 2017-04-05

print (type(df.loc[0, 'Some_date']))
<class 'pandas._libs.tslibs.timestamps.Timestamp'>

print (df['Some_date'].dtype)
datetime64[ns]
...