У меня есть следующее значение даты дня:
a_date = datetime.date(2018,9,13)
И pandas dataframe df
со следующим столбцом:
df['somedates']
0 2010-07-27
1 1999-02-15
2 1997-07-15
3 2012-11-15
4 1999-02-17
5 1999-02-16
6 1999-02-17
7 2012-10-12
8 1999-09-22
9 1998-05-09
10 1998-05-09
Name: somedates, Length: 11, dtype: datetime64[ns]
Я могу сделать следующее на моей машине Windows, и он отлично работает
df['somedates'] = a_date - df['somedates']
Однако на ubuntu возникает следующая ошибка:
unsupported operand type(s) for -: 'DatetimeIndex' and 'datetime.date
Может ли кто-нибудь указать мне в правильном направлении на это? Почему он работает в Windows, но не в Linux?
Более подробная информация
print(type(a_date))
<class 'datetime.date'>
print(type(df['somedates']))
<class 'pandas.core.series.Series'>
print(type(df['somedates'][0]))
<class 'pandas._libs.tslib.Timestamp'>
Поскольку я не могу прокомментировать:
Причина, по которой эта работа не работает, заключается в том, что вы пытаетесь использовать версию datetime datetime с версией datetime, source. То, что я сделал бы в вашей ситуации, - это преобразовать все в одно и то же время с помощью pd.to_datetime():
import pandas as pd
import datetime
a_date = datetime.date(2018,9,13) # we can change this to a_date = pd.to_datetime('2018-9-13')
df = pd.DataFrame()
df['somedates'] = ['2010-07-27', '1999-02-15', '1997-07-15','2012-11-15','2012-11-15','1999-02-17']
df['somedates'] = pd.to_datetime(df['somedates'])
df['somedates'] = pd.to_datetime(a_date) - df['somedates'] # if we enact the change above then we can simply do a_date - df['somedates']
display(df)
somedates
0 2970 days
1 7150 days
2 7730 days
3 2128 days
4 2128 days
5 7148 days
Я бы тоже посмотрел на это
a_date
в pd.to_datetime()
?