我在一个10mb的csv中有一个100000行15列的数据集。
我正在处理的列是字符串格式中的:日期/时间列
源代码
import pandas as pd
import datetime as dt
trupl = pd.DataFrame({'Time/Date' : ['12/1/2021 2:09','22/4/2021 21:09','22/6/2021 9:09']})
trupl['Time/Date'] = pd.to_datetime(trupl['Time/Date'])
print(trupl)
输出
Time/Date
0 2021-12-02 02:09:00
1 2021-04-22 21:09:00
2 2021-06-22 09:09:00
我需要做的有点令人困惑,但我会尽量让它变得简单:
如果日期的时间在上午12点到8点之间;从时间/日期中减去一天,并将新的时间戳放在一个新列中。
如果没有,就照原样说。
预期输出
Time/Date Date_adjusted
0 12/2/2021 2:09 12/1/2021 2:09
1 22/4/2021 21:09 22/4/2021 21:09
2 22/6/2021 9:09 22/6/2021 9:09
我尝试了以下代码:
trupl['Date_adjusted'] = trupl['Time/Date'].map(lambda x:x- dt.timedelta(days=1) if x >= dt.time(0,0,0) and x < dt.time(8,0,0) else x)
我得到一个TypeError:'>='在"Timestamp"one_answers"datetime.time"之间不支持
当把dt.time应用于x时,我得到一个错误";时间戳";对象没有属性"dt">
那么我如何将x转换为时间来进行比较呢?或者有更好的解决方法?
我找了很多修复方法,但找不到类似的案例。
尝试:
trupl['Date_adjusted'] = trupl['Time/Date'].map(lambda x: x - dt.timedelta(days=1) if (x.hour >= 0 and x.hour < 8) else x)