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

我有这个数据框


number_of_hrs  number_of_pts

65             1

7              1

31             1

6 DAY          1

23             1

21             1

5.0            1

我想将“6 DAY”之类的值转换为小时数。可能吗?


手掌心
浏览 100回答 4
4回答

慕哥9229398

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_evaldf['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')]

海绵宝宝撒

使用.loc和str.extract使用正则表达式模式可以为您提供更多的灵活性,但 ansev 的pd.eval解决方案更巧妙。idx = df.loc[df['number_of_hrs'].str.contains('day',case=False)].indexpat = '(\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'] = hrsprint(df)  number_of_hrs  number_of_pts0            65              11             7              12            31              13           144              14            23              15            21              16           5.0              1

陪伴而非守候

我的猜测是,这是一个时间增量,您可以获取秒数并将其转换为小时数,如下所示df.loc[df['number_of_hrs'].str.lower().contains('day'), 'number_of_hrs'] = df['number_of_hrs'].seconds//3600

MM们

另一种解决方案: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))))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python