Python 3.x 数据框中日期列不工作的逻辑比较
我有这样一个数据帧:Python 3.x 数据框中日期列不工作的逻辑比较,python-3.x,pandas,dataframe,datetime,Python 3.x,Pandas,Dataframe,Datetime,我有这样一个数据帧: Milestone Initial_Date Next_Date Buffer Buffer1 ------------------------------------------------------- M0 11/1/2020 13/1/2020 6 1 M1 13/1/2020 15/1/2020 3 1 M0 24/12/2019
Milestone Initial_Date Next_Date Buffer Buffer1
-------------------------------------------------------
M0 11/1/2020 13/1/2020 6 1
M1 13/1/2020 15/1/2020 3 1
M0 24/12/2019 25/12/2019 4 2
M1 16/12/2019 21/12/2019 9 2
M0 8/1/2020 14/1/2020 10 1
M2 6/1/2020 9/1/2020 5 2
M3 18/1/2020 21/1/2020 3 4
我将下面的逻辑应用于数据帧
CASE
WHEN milestone = 'M0' THEN Intial_date + Buffer
WHEN milestone = 'M1' THEN Next_datee + Buffer
WHEN milestone >= 'M2' THEN Intial_date + Buffer1
ELSE NULL
END AS Result
预期产出:
Result
------------
17/1/2020
18/1/2020
28/12/2019
30/12/2019
18/1/2020
8/1/2020
22/1/2020
我的代码:
#日期字段的数据类型为datetime64[ns],缓冲区为float64
data['Milestone'] = pd.Categorical(data['Milestone'],categories=['00','M0','M1','M2','M3','M4','M5','M6','M7'],ordered=True)
buffer = pd.to_timedelta(final_result['Buffer'], unit='d')
buffer1 = pd.to_timedelta(final_result['Buffer1'], unit='d')
data['Result'] =np.select([data['Milestone']=='M0',data['Milestone']=='M1',
data[MILESTONE']>='M2']
,[data['Initial_Date']+Buffer,data['Next_Date']+Buffer,
data['Initial_Date']+Buffer1)
我犯了一个错误
TypeError:无效的类型升级
从上面的代码。您能帮我解决这个问题吗?首先需要将默认参数添加到
None
或NaT
,然后将输出转换为日期时间:
data['Result'] =pd.to_datetime(np.select([data['Milestone']=='M0',
data['Milestone']=='M1',
data['Milestone']>='M2'],
[data['Initial_Date']+buffer,
data['Next_Date']+buffer,
data['Initial_Date']+buffer1],
default=None))
print (data)
Milestone Initial_Date Next_Date Buffer Buffer1 Result
0 M0 2020-01-11 2020-01-13 6 1 2020-01-17
1 M1 2020-01-13 2020-01-15 3 1 2020-01-18
2 M0 2019-12-24 2019-12-25 4 2 2019-12-28
3 M1 2019-12-16 2019-12-21 9 2 2019-12-30
4 M0 2020-01-08 2020-01-14 10 1 2020-01-18
5 M2 2020-01-06 2020-01-09 5 2 2020-01-08
6 M3 2020-01-18 2020-01-21 3 4 2020-01-22
什么是'default=pd.Timestamp('NaT')`do@Rahulrajan-datetime缺少值。@Rahulrajan它是
Else Null
,但带有datetime数据类型,因为所有其他值都是日期