大熊猫在没有周末的情况下创造日期

时间:2016-06-06 02:58:51

标签: python-3.x pandas timestamp date-range

给出以下数据框:

import pandas as pd
df=pd.DataFrame({'A':['a','b','c'],
        'first_date':['2015-08-31 00:00:00','2015-08-24 00:00:00','2015-08-25 00:00:00']})
df.first_date=pd.to_datetime(df.first_date) #(dtype='<M8[ns]')
df['last_date']=pd.to_datetime('5/6/2016') #(dtype='datetime64[ns]')
df

    A   first_date   last_date
0   a   2015-08-31  2016-05-06
1   b   2015-08-24  2016-05-06
2   c   2015-08-25  2016-05-06

我想创建一个新列,其中包含&quot; first_date&#39;之间的日期列表(或数组)。和&#39; last_date&#39;不包括周末。

到目前为止,我已经尝试过这个:

pd.date_range(df['first_date'],df['last_date'])

...但发生此错误:

TypeError: Cannot convert input to Timestamp

我在pd.date_range之前也试过这个......

pd.Timestamp(df['first_date'])

......但没有骰子。

提前致谢!

P.S。:

在这个障碍之后,我将尝试查看其他日期列表,如果它们属于生成的数组(在&#39; A&#39;中每行),则将它们从列表中减去或数组)。我将其作为一个单独的问题发布。

1 个答案:

答案 0 :(得分:6)

freq='B'为您提供工作日或无周末。

您的错误:

  

TypeError:无法将输入转换为时间戳

当系列期望pd.date_range

时,是否会将系列传递给Timestamp函数?

相反,请使用apply

但是,我仍然觉得将列表放入数据帧的特定单元格很棘手。我使用的方法是使用pd.Series([mylist])。请注意,它是列表的列表。如果只是pd.Series(mylist) pandas会将列表转换为系列,那么您将得到一系列数据集系列。

尝试:

def fnl(x):
    l = pd.date_range(x.loc['first_date'], x.loc['last_date'], freq='B')
    return pd.Series([l])

df['range'] = df.apply(fnl, axis=1)