猿问

如何从熊猫中的一系列字符串中提取小时和分钟

几个小时以来,我一直被这个看似简单的问题所困扰。我想将以下字符串转换为分钟。(如果可以的话,或者小时和分钟)。


foo['stringtime'] = pd.Series(['1 hour and 59 minutes','2 hours', np.nan, '38 minutes', '4 hours and 31 minutes'])


#What I've tried:

foo['stringtime'] = foo['stringtime'].str.replace(r'hours?','').str.replace(' minutes','').str.split(' and ')

然而,这会'2 hours'造成一种情况'38 minutes'['2']['38']


#What I would like to happen:

foo.head()

output:

119

120

NaN (or 0)

38

271

有什么漂亮优雅的 pythonic 方法可以做到这一点吗?


ibeautiful
浏览 111回答 2
2回答

守着一只汪

尝试使用正则表达式。前任:import redef p_time(val):    try:        t = 0        h = re.search(r"(\d+) hour(s)?", val)        if h:            t += int(h.group(1)) * 60        m = re.search(r"(\d+) minute(s)?", val)        if m:            t += int(m.group(1))        return t    except:        pass    return 0s = pd.Series(['1 hour and 59 minutes','2 hours', np.nan, '38 minutes', '4 hours and 31 minute'])print(s.apply(p_time).astype(int))输出:0    1191    1202      03     384    271dtype: int32

慕无忌1623718

另一种方法可能只是用于numexpr评估数值方程:import numexprfoo = pd.Series(['1 hour and 59 minutes','2 hours', np.nan, '38 minutes', '4 hours and 31 minutes'])(foo.str.replace(r' hours?','*60').str.replace(' minutes','').str.replace(' and ', '+')    .fillna('0').apply(numexpr.evaluate))输出:0    1191    1202      03     384    271
随时随地看视频慕课网APP

相关分类

Python
我要回答