为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ibeautiful 2023-04-25 16:50:38
几个小时以来,我一直被这个看似简单的问题所困扰。我想将以下字符串转换为分钟。(如果可以的话,或者小时和分钟)。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:119120NaN (or 0)38271有什么漂亮优雅的 pythonic 方法可以做到这一点吗?
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

尝试使用正则表达式。


前任:


import re


def 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 0


s = 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    119

1    120

2      0

3     38

4    271

dtype: int32


查看完整回答
反对 回复 2023-04-25
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

另一种方法可能只是用于numexpr评估数值方程:


import numexpr


foo = 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    119

1    120

2      0

3     38

4    271


查看完整回答
反对 回复 2023-04-25
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信