pandas ;用MM:SS转换列,十进制转换成秒数

编程入门 行业动态 更新时间:2024-10-18 18:28:18
本文介绍了 pandas ;用MM:SS转换列,十进制转换成秒数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

嘿:花了几个小时尝试做一件很简单的事情,但无法弄清楚.

Hey: Spent several hours trying to do a quite simple thing,but couldnt figure it out.

我有一个带有df ['Time']列的数据框,其中包含从0开始到20分钟的时间,像这样:

I have a dataframe with a column, df['Time'] which contains time, starting from 0, up to 20 minutes,like this:

1:10,10 1:16,32 3:03,04

第一个是分钟,第二个是秒,第三个是毫秒(只有两位数字).

First being minutes, second is seconds, third is miliseconds (only two digits).

是否有一种方法可以通过Pandas自动将该列转换为秒,而无需将该列作为系列的时间索引?

Is there a way to automatically transform that column into seconds with Pandas, and without making that column the time index of the series?

我已经尝试了以下方法,但无法正常工作:

I already tried the following but it wont work:

pd.to_datetime(df['Time']).convert('s') # AttributeError: 'Series' object has no attribute 'convert'

如果唯一的方法是解析时间,只需指出,我将为这个问题准备适当/详细的答案,请不要浪费您的时间=) 谢谢!

If the only way is to parse the time just point that out and I will prepare a proper / detailed answer to this question, dont waste your time =) Thank you!

推荐答案

代码:

import pandas as pd import numpy as np import datetime df = pd.DataFrame({'Time':['1:10,10', '1:16,32', '3:03,04']}) df['time'] = df.Time.apply(lambda x: datetime.datetime.strptime(x,'%M:%S,%f')) df['timedelta'] = df.time - datetime.datetime.strptime('00:00,0','%M:%S,%f') df['secs'] = df['timedelta'].apply(lambda x: x / np.timedelta64(1, 's')) print df

输出:

Time time timedelta secs 0 1:10,10 1900-01-01 00:01:10.100000 00:01:10.100000 70.10 1 1:16,32 1900-01-01 00:01:16.320000 00:01:16.320000 76.32 2 3:03,04 1900-01-01 00:03:03.040000 00:03:03.040000 183.04

如果您的时间增量也为负:

If you have also negative time deltas:

import pandas as pd import numpy as np import datetime import re regex = repile(r"(?P<minus>-)?((?P<minutes>\d+):)?(?P<seconds>\d+)(,(?P<centiseconds>\d{2}))?") def parse_time(time_str): parts = regex.match(time_str) if not parts: return parts = parts.groupdict() time_params = {} for (name, param) in parts.iteritems(): if param and (name != 'minus'): time_params[name] = int(param) time_params['milliseconds'] = time_params['centiseconds']*10 del time_params['centiseconds'] return (-1 if parts['minus'] else 1) * datetime.timedelta(**time_params) df = pd.DataFrame({'Time':['-1:10,10', '1:16,32', '3:03,04']}) df['timedelta'] = df.Time.apply(lambda x: parse_time(x)) df['secs'] = df['timedelta'].apply(lambda x: x / np.timedelta64(1, 's')) print df

输出:

Time timedelta secs 0 -1:10,10 -00:01:10.100000 -70.10 1 1:16,32 00:01:16.320000 76.32 2 3:03,04 00:03:03.040000 183.04

更多推荐

pandas ;用MM:SS转换列,十进制转换成秒数

本文发布于:2023-10-24 20:04:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1524873.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:转换成   MM   pandas   十进制   SS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!