Ken*_*lor 5 python time duration numpy pandas
我是python和编程的新手(所以请放轻松)并希望有人可以提供帮助.我的自行车行程持续时间为dtype:对象 持续时间14h 26min.2秒.0小时8分钟.34sec.0小时12分钟 17sec.
理想情况下,我想创建一个新的列,将计算的分钟持续时间保持为整数.所以h需要*60,并且秒需要.所以我会: 持续时间866 9 12
我遇到了分裂和获得数字的第一个障碍.我对此分裂感到高兴:
def ConvertDuration(Minutes):
return Minutes.split(' ')[0].split('.')[1].strip()
WashBike['DurationMin'] = pd.DataFrame({'Duration':WashBike['Duration'].apply(ConvertDuration)})
Run Code Online (Sandbox Code Playgroud)
我可以玩位置并为h,min和sec分别创建一列.但是字符串字符将保留.我是否需要进行另一次拆分以进一步分离和删除字符?
我还尝试用以下内容删除字符:
WashBike['DurationInt'] = WashBike['Duration'].str.strip(' ').str.strip('.').str.strip('hHmMiInNsSeEcC')
Run Code Online (Sandbox Code Playgroud)
我无法进入将值放入单个数字分钟单位测量的阶段.我在考虑做这样的事情:
WashBike['DurationMn'] = WashBike['Duration'].split(' ').apply(lambda x: int(x[0]) * 60 + int(x[1] + int(x[2].round()) ))
Run Code Online (Sandbox Code Playgroud)
虽然我无法做到这一点.
我花了两天时间查看stackoverflow和其他人.我发现了很多关于日期时间等等.虽然我试图将持续时间转换为hh:mm:ss,但我不确定它是否是正确的路线.任何帮助和建议将不胜感激.
肯
这是一种不使用任何日期解析模块即可完成此操作的方法。
单行 - 您可以通过正则表达式apply从duration列中提取数字,例如 拆分为多行以提高可读性
(df['Duration']
.apply(lambda x: sum([a*int(b)
for a,b in zip([60., 1., 1./60],
re.findall(r'\d+', x))]))
)
Run Code Online (Sandbox Code Playgroud)
'4h 26min. 2sec.'本质上,对于像您首先找到模式这样的字符串re.findall(r'\d+', x),[4, 26, 2]即现在将其与分钟[60., 1., 1./60]和sum值相乘。
比方说df就像
In [7]: df = pd.DataFrame({'Duration': ['4h 26min. 2sec.',
'0h 8min. 34sec.',
'0h 12min. 17sec.']})
In [8]: df
Out[8]:
Duration
0 4h 26min. 2sec.
1 0h 8min. 34sec.
2 0h 12min. 17sec.
Run Code Online (Sandbox Code Playgroud)
然后,可以像这样提取分钟数
In [9]: (df['Duration']
...: .apply(lambda x: sum([a*int(b)
...: for a,b in zip([60., 1., 1./60],
...: re.findall(r'\d+', x))]))
...: )
Out[9]:
0 266.033333
1 8.566667
2 12.283333
Name: Duration, dtype: float64
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,您还可以创建自定义函数minutes
def minutes(string):
pattern = re.findall(r'\d+', string)
minutes_mul = [a*int(b) for a,b in zip([60., 1., 1./60], pattern)]
return sum(minutes_mul)
Run Code Online (Sandbox Code Playgroud)
然后,然后申请
df['Duration'].apply(minutes)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |