我可能做错了,或者有比这更好的方法,因为我还是python新手。对任何明显的错误预先道歉。
我有一个pandas数据框,它有一个str列,其中包含日期和时间。它是str,因为时间是“广播”格式的,这意味着一天有29个小时。所以我们会看到像2018年1月1日29:59:59这样的日期。
作为第1秒和2018年1月2日06:00:00。
我的目标是将这些数据转换为实时数据。这意味着24到29之间的任何一个小时都需要换班。
我已经将str拆分为两个新列['dt']和['ti'],从['ti']中抽出一个小时到一个新列['hr']并将其设为int。
然后我将pd.to_datetime应用于['dt']并添加了一个规则。
df['Dt'] = np.where(df['Hr'] > 23, df['Dt']+pd.DateOffset(1),df['Dt']+pd.DateOffset(0) )
这很好用。
我现在需要将小时更改为实时,例如24=00、25=02等。
我想最好的方法是用一个口述稿并绘制地图,所以我做了一个口述稿,
HourMap = {'24':'00','25':'01','26':'02','27':'03','28':'04','29':'05','30':'06'}
然后写了这个
df['Hr1'] = np.where(df['Hr'] > 23, df.replace({'Hr':HourMap}),df['Hr'])
但我得到一个“价值错误”
ValueError: operands could not be broadcast together with shapes (273,) (273,29) (273,)
我看过数据框中的那些行,它们只是普通的int。在测试时,我可以对它们应用数学(例如df['test']=df['hr']+1。
我确实将它们转换为str并尝试相同的规则,但得到了相同的错误。
我是不是疯了?
谢谢,