我在数据集中有两个变量:开始日期(格式 datetime64[ns])和结束日期(格式 datetime64[ns])。我正在使用以下代码来获取开始日期和结束日期之间的日期。
pd.date_range(start = data['beginning_date'], end = data['end_date'], freq = 'D')
但它抛出以下错误。
cannot convert input to timestamp
为什么我会出现上述错误。我尝试如下更改,但它不起作用。
pd.date_range(start = data['beginning_date'], end = data['end_date'], freq = 'D').astype('datetime')
而且我也希望每天作为单独的记录,例如:开始日期 = 01APR2015 和结束日期 = 30APR2015,我希望每天作为单独的记录,如下所示。
01APR2015
02APR2015 etc
如何将其作为单独的记录获取?
提前致谢。
假设您有以下 DF:
In [30]: df
Out[30]:
beginning_date end_date
0 2013-12-22 2014-01-01
1 2009-12-14 2009-12-28
2 2010-12-31 2011-01-11
我猜你在调用 pd.date_range()
方法时尝试使用 series 而不是
scalar值:
In [31]: pd.date_range(df.beginning_date, df.end_date)
...
skipped
...
TypeError: Cannot convert input to Timestamp
所以试试这个:
In [32]: pd.date_range(df.beginning_date.min(), df.end_date.max())
Out[32]:
DatetimeIndex(['2009-12-14', '2009-12-15', '2009-12-16', '2009-12-17', '2009-12-18', '2009-12-19', '2009-12-20', '2009-12-21', '2009-12-22',
'2009-12-23',
...
'2013-12-23', '2013-12-24', '2013-12-25', '2013-12-26', '2013-12-27', '2013-12-28', '2013-12-29', '2013-12-30', '2013-12-31',
'2014-01-01'],
dtype='datetime64[ns]', length=1480, freq='D')
如果您首先以这种方式格式化输入,那么转换就会起作用。
pd.date_range(start = '30-APR-2015', end = '05-MAY-2015', freq = 'D')
输出将是
DatetimeIndex(['2015-04-30', '2015-05-01', '2015-05-02', '2015-05-03',
'2015-05-04', '2015-05-05'],
dtype='datetime64[ns]', freq='D')
Если кто придет сюда с этой проблемой из 2к20, то решение - применение lambda
如果有人从 2k20 开始遇到这个问题,解决方案是使用 lambda...
f = lambda x: len(pd.date_range(start=x[0],end=x[1],freq='M'))
df_clear['difference'] = df_clear[['start_month','finish_month']].apply(f, axis=1)