熊猫在午夜后添加一天

时间:2019-01-04 03:58:19

标签: python pandas

我正试图在午夜之后添加一天。 例如,我在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().我不知道为什么...

谢谢您的帮助。

1 个答案:

答案 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