我在csv文件中有一个包含许多列和行的数据框,我的其中一列是Pickup_datetime,我正在尝试舍入日期时间以计算值。
Pickup_Datetime Dropoff_Datetime
2018-01-01 00:00:20 2018-01-01 00:06:44
2018-01-01 00:00:23 2018-01-01 00:31:12
.
.
.
2018-01-31 23:59:43 2018-02-01 00:21:01
2018-01-31 23:59:50 2018-02-01 00:21:43
我尝试了不同的路径来更改类型,但仍然给我一条错误消息
df = data.round["H"]
df
Typeerror: decimals must be an integer, a dict-like or a Series
df['Pickup_Datetime'] = df['Pickup_Datetime'].values.astype(int)
df['Pickup_Datetime'] = df['Pickup_Datetime'].apply(Decimal)
我希望输出:
Pickup_Datetime
2018-01-31 00:00:00
2018-01-31 01:00:00
2018-01-31 02:00:00
.
.
.
.
答案 0 :(得分:1)
要舍入日期时间,请使用日期时间序列的.dt
访问器
df['Pickup_Datetime'] = df['Pickup_Datetime'].dt.round(freq='1H')
答案 1 :(得分:0)
编辑:参考其他答案,简单得多
您是否尝试过将每个日期时间转换为纪元,将其除以3600(一小时的秒数),然后乘以3600,然后将其转换回日期时间?
Epoch实际上是自1970-01-01 00:00:00以来的秒数
一些可以做到这一点的代码(不确定如何使用数据框进行集成):
datetime.datetime.fromtimestamp(round((df['Pickup_Datetime'].apply(strftime,format='%s').apply(int)/3600)*3600)
可能需要调整以符合PEP8标准;)
P.S。如果数据框使用日期时间作为字符串,则必须首先使用datetime.strptime( format ),文档here
将apply应用于将其转换为datetime对象。