由于数据类型错误,无法从时间数据中减去小时数
Posted
技术标签:
【中文标题】由于数据类型错误,无法从时间数据中减去小时数【英文标题】:Can't subtract hours from time data because of data type error 【发布时间】:2021-02-21 06:13:56 【问题描述】:我正在尝试根据某些条件从我的时间数据中减去 12 小时,但它不起作用。 我的数据如下所示:
StartTime EndTime Hours
12:00:00 00:30:00 5.5
12:00:00 00:30:00 -4.5
13:00:00 01:20:00 -6.5
12:30:00 04:06:00 -12.1
12:30:00 04:06:00 -12.1
12:30:00 04:06:00 -12.1
如果“小时”为负数而不是 -12.1,我想在 EndTime 中将 AM 翻转为 PM(例如 - 或 + 12 小时)。所以我这样做了:
if df[df["Hour"] < 0].all().all() and df["Hours"].all().all() != -12.1:
df["EndTime"] = pd.to_datetime(df["EndTime"]) - timedelta(hours=12)
但我的数据没有变化。 EndTime 和 StartTime 的当前数据类型是对象,因此我尝试将其从对象更改为日期时间,但出现此错误。
TypeError:
我厌倦了这些代码(不是同时),但它们都不起作用。
df['Hours'] = df['Hours'].astype('datetime64')
df['Hours'] = pd.to_datetime(df['Hours']).dt.time
df['Hours'] = pd.to_datetime(df['Hours']).dt.floor('d')
我不确定我的代码是否因为我的时间值的数据类型而减去了 12 小时,或者我为我的 if 语句选择了错误的选项。例如,我不确定在这种情况下是否可以使用 all().all()。
【问题讨论】:
在if
语句中,有Hour
而不是Hours
。会不会是这个问题?
不,情况并非如此。还是不行
我发布了一个关于可能的解决方法的答案,将timedelta
添加到time
。我不知道如何在pandas
中应用这些,但无论如何它可能会有所帮助。
【参考方案1】:
time
类的对象不支持加法/减法运算,因此您必须以某种方式使用datetime
对象:
>>> from datetime import datetime, date, time, timedelta
>>> end_time = time(1, 20, 0)
>>> end_datetime = datetime.combine(date(2020, 1, 1), end_time)
>>> new_datetime = end_datetime + timedelta(hours=12)
>>> new_end_time = new_datetime.time()
>>> new_end_time
datetime.time(13, 20)
或者只是简单地替换 time
对象中的小时:
>>> end_time = time(1, 20, 0)
>>> new_hour = (end_time.hour + 12) % 24
>>> new_end_time = end_time.replace(hour=new_hour)
>>> new_end_time
datetime.time(13, 20)
【讨论】:
以上是关于由于数据类型错误,无法从时间数据中减去小时数的主要内容,如果未能解决你的问题,请参考以下文章
由于数据类型,无法查询从 Google 表格加载的 BigQuery 表
Python PySpark:从日期列中减去整数列错误:列对象不可调用
db2数据库 我要根据当前时间减去一个小时作为开始时间,当前时间作为结束时间查询总数量