我正试图在午夜之后添加一天。 例如,我在Pandas的Dataframe中有一个键入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().
我不知道为什么...
谢谢您的帮助。
答案 0 :(得分:1)
假设文件的数据框和日期如下:
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