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

如何将熊猫数据框的对象值转换为小时数?

如何将熊猫数据框的对象值转换为小时数?

手掌心 2022-07-05 17:54:08
我有这个数据框number_of_hrs  number_of_pts65             17              131             16 DAY          123             121             15.0            1我想将“6 DAY”之类的值转换为小时数。可能吗?
查看完整描述

4 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

pd.eval与 一起使用Series.str.replace。


df['number_of_hrs'] = pd.eval(df['number_of_hrs'].str.replace('DAY','*24'))

print(df)

#  number_of_hrs  number_of_pts

#0            65              1

#1             7              1

#2            31              1

#3           144              1

#4            23              1

#5            21              1

#6             5              1

或者


from ast import literal_eval

df['number_of_hrs'] = df['number_of_hrs'].str.replace('DAY','*24').apply(literal_eval)

#Alternative

#df['number_of_hrs'] = [literal_eval(s) for s in df['number_of_hrs'].str.replace('DAY','*24')]



查看完整回答
反对 回复 2022-07-05
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

使用.loc和str.extract


使用正则表达式模式可以为您提供更多的灵活性,但 ansev 的pd.eval解决方案更巧妙。


idx = df.loc[df['number_of_hrs'].str.contains('day',case=False)].index


pat = '(\d+)\s{1}DAY'


hrs = (df.loc[df['number_of_hrs'].str.contains('day',case=False)]["number_of_hrs"].str.extract(

    pat

).astype(int) * 24)[0]


df.loc[idx,'number_of_hrs'] = hrs

print(df)


  number_of_hrs  number_of_pts

0            65              1

1             7              1

2            31              1

3           144              1

4            23              1

5            21              1

6           5.0              1


查看完整回答
反对 回复 2022-07-05
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

我的猜测是,这是一个时间增量,您可以获取秒数并将其转换为小时数,如下所示

df.loc[df['number_of_hrs'].str.lower().contains('day'), 'number_of_hrs'] = df['number_of_hrs'].seconds//3600



查看完整回答
反对 回复 2022-07-05
?
MM们

TA贡献1886条经验 获得超2个赞

另一种解决方案:

import pandas as pd
import re

数据:

df = pd.DataFrame({'number_of_hrs':[65,7,31,'6 DAY', 23,21,5.0], 'number of pts':[1,1,1,1,1,1,1]})

编码:

df['number_of_hrs'] = pd.eval(df['number_of_hrs'].apply(lambda x: re.sub(r' DAY', '*24', str(x))))



查看完整回答
反对 回复 2022-07-05
  • 4 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

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