Dan*_*rty 3 timestamp date-range python-3.x pandas
给出以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列,其中包含'first_date'和'last_date'之间的日期列表(或数组),它排除了周末.
到目前为止,我试过这个:
pd.date_range(df['first_date'],df['last_date'])
Run Code Online (Sandbox Code Playgroud)
...但发生此错误:
TypeError: Cannot convert input to Timestamp
Run Code Online (Sandbox Code Playgroud)
我也在pd.date_range之前试过这个...
pd.Timestamp(df['first_date'])
Run Code Online (Sandbox Code Playgroud)
......但没有骰子.
提前致谢!
PS:
在这个障碍之后,我将尝试查看其他日期列表,如果它们属于生成的数组('A'中的每一行),则将它们从列表或数组中减去.我会把它作为一个单独的问题发布.
freq='B' 给你工作日,或没有周末.
你的错误:
TypeError:无法将输入转换为Timestamp
是您pd.date_range在期望a时将系列传递给函数的结果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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |