首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >减去time to time列

减去time to time列
EN

Stack Overflow用户
提问于 2020-06-23 15:07:05
回答 3查看 52关注 0票数 1

我得到了一个数据帧的列:

代码语言:javascript
运行
复制
print(df["Hour"])

           Hour 
0      01:21:46  
1      01:22:16  
2      01:22:46  
3      01:25:16  
4      01:25:46  

它说列类型是object,但是当我尝试使用pd.to_datetime进行转换时,TypeError: <class 'datetime.time'> is not convertible to datetime说。事实上,我正在尝试将该列的每一行的时间减去00:00,这样我就可以将结果转换为分钟。我试着创建a=pd.to_datetime("00:00"),但它包含了当前日期,并且我只想要我之前写的时间。

我尝试使用df["newhour"]=df["Hour"]-a,但它显示错误:TypeError: descriptor '__sub__' requires a 'datetime.datetime' object but received a 'numpy.ndarray'

我知道另一种解决方案是将每次时间转换为分钟,所以我尝试使用df["Hour"].dt.seconds,但它显示错误:AttributeError: Can only use .dt accessor with datetimelike values.

您好!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-23 15:54:16

该错误消息是您的列包含datetime.time对象的证据。标准pd.to_datetime只能转换strdatetime.datetime对象。因此,您必须首先将每个小时转换为可接受的格式。在这里,我会将所有内容转换为秒:

代码语言:javascript
运行
复制
df['Hour'].apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)

它给出了一个整数Series,您现在可以轻松地处理它(除以60。要将其转换为分钟,或...):

代码语言:javascript
运行
复制
0    4906
1    4936
2    4966
3    5116
4    5146
票数 1
EN

Stack Overflow用户

发布于 2020-06-23 15:22:03

要获得分钟或秒数,您可以简单地执行以下操作:

代码语言:javascript
运行
复制
df1['Minutes'] = round(pd.to_datetime(df1['Hour']).apply(lambda x: x.hour * 60 + x.minute + x.second / 60), 1)
df['Seconds'] = pd.to_datetime(df['Hour']).apply(lambda x: x.hour * 3600 + x.minute * 60 + x.second)

要得到以秒为单位的差值,您可以使用.shift()

代码语言:javascript
运行
复制
df['Seconds_diff'] = df['Seconds'] - df['Seconds'].shift()
票数 1
EN

Stack Overflow用户

发布于 2020-06-23 16:21:28

dt访问器是“dt.Second”。所以我想我们可以减去它。忽略'1900-01-01‘,因为我用'to_datetime’转换了它。

代码语言:javascript
运行
复制
df['Hour'] = pd.to_datetime(df['Hour'], format='%H:%M:%S')
df['seconds_diff'] = (df['Hour'].dt.minute - df['Hour'].shift().dt.minute)*60+(df['Hour'].dt.second - df['Hour'].shift().dt.second)

    Hour    seconds_diff
0   1900-01-01 01:21:46 NaN
1   1900-01-01 01:22:16 30.0
2   1900-01-01 01:22:46 30.0
3   1900-01-01 01:25:16 150.0
4   1900-01-01 01:25:46 30.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62529150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档