熊猫在午夜后加一天

问题描述 投票:-1回答:1

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

提前谢谢你的帮助。

python pandas
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.