我想在午夜后加一天。例如,我在Dataframe,Pandas中有一个列类型为datetime64。
最初,我的csv文件只有12:13:00,07:12:53,02:33:27的时间。
我想在时间中添加一个日期,因为文件名有一个日期。问题是我必须在午夜之后准时添加一天。
这是一个例子。
这是原始数据,文件名为mycsv_20180101.csv
time
22:00:00
23:00:00
03:00:00
这就是我要的。
time
2018-01-01 22:00:00
2018-01-01 23:00:00
2018-01-02 03:00:00 # this is the point.
有什么想法吗?
我已经考虑了一段时间,我的想法是
首先,添加一个日期。其次,df['time'].apply(lambda x: x + pd.to_timedelta('1d') if x.dt.hour < 6 else False)
#在早上6点之前,我认为那是第二天
但它说'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我不知道为什么...
提前谢谢你的帮助。
假设您的文件中的数据框和日期如下:
df = pd.DataFrame({'time': ["18:10:0","19:10:00","20:10:00","21:10:00","22:10:00","23:10:00","00:10:00","01:10:00","02:10:00","03:10:00"]})
file_date = '20180101'
您首先需要将file_date
添加到您的数据中
df.time = df.time.apply(lambda x: ' '.join((file_date, x)))
产量:
time
0 20180101 18:10:00
1 20180101 19:10:00
2 20180101 20:10:00
3 20180101 21:10:00
4 20180101 22:10:00
5 20180101 23:10:00
6 20180101 00:10:00
7 20180101 01:10:00
8 20180101 02:10:00
9 20180101 03:10:00
您需要做的是将它们转换为datetime
类型,并在小时小于4时添加一天。
df.time = pd.to_datetime(df.time).apply(lambda x: x + pd.DateOffset(days=1) if x.hour <=3 else x)
这给出了你想要的输出:
time
0 2018-01-01 18:10:00
1 2018-01-01 19:10:00
2 2018-01-01 20:10:00
3 2018-01-01 21:10:00
4 2018-01-01 22:10:00
5 2018-01-01 23:10:00
6 2018-01-02 00:10:00
7 2018-01-02 01:10:00
8 2018-01-02 02:10:00
9 2018-01-02 03:10:00