Pandas 无法将输入转换为时间戳错误

问题描述 投票:0回答:3

我在数据集中有两个变量:开始日期(格式 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

如何将其作为单独的记录获取?

提前致谢。

python pandas
3个回答
7
投票

假设您有以下 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')

0
投票

如果您首先以这种方式格式化输入,那么转换就会起作用。

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')

-5
投票

Если кто придет сюда с этой проблемой из 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)
© www.soinside.com 2019 - 2024. All rights reserved.