【发布时间】:2020-12-30 11:04:45
【问题描述】:
对不起,我缺乏 Pandas 和 datetime 能力。我已经尝试过,但有些东西似乎超出了我目前有限的技能范围。
我正在使用日期列 (FinalStartPunch),它键入 datetime64[ns],如果 Hour 为 0,则从 datetime64[ns] 列(日期)中减去一天。如果 FinalStartPunch 小时不是 0,则只需照原样复制日期列值。
样本数据:
date FinalStartPunch
6/27/2015 27JUN2015:14:15:00
7/23/2015 23JUL2015:13:31:00
7/23/2015 23JUL2015:18:43:00
8/15/2015 15AUG2015:18:35:00
8/15/2015 15AUG2015:23:30:00
8/16/2015 16AUG2015:00:00:00
1/30/2016 30JAN2016:18:25:00
1/30/2016 30JAN2016:23:52:00
1/31/2016 31JAN2016:00:00:00
8/13/2016 13AUG2016:18:30:00
8/13/2016 13AUG2016:23:58:00
8/14/2016 14AUG2016:00:00:00
1/28/2017 28JAN2017:18:30:00
1/28/2017 28JAN2017:23:57:00
1/29/2017 29JAN2017:00:00:00
关键代码部分:
df['New'] = df['date'] - pd.Timedelta(1, unit='D') ### This one works
print(df.dtypes)
conds = [df['FinalStartPunch'].dt.hour == 0, df['FinalStartPunch'].dt.hour > 0]
choices = [df['date'] - pd.Timedelta(1, unit='D'), df['date']]
df['Date1'] = np.select(conds, choices, default=0)
错误:无效的类型提升
df['New'] 在选择行中使用相同的代码,这似乎是导致错误的问题。
也许是一个 Numpy 问题,我需要一种不同的方法来做到这一点?
任何帮助 - 非常感谢。
【问题讨论】:
标签: pandas datetime type-promotion