4 回答

TA貢獻1877條經(jīng)驗 獲得超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')]

TA貢獻1809條經(jīng)驗 獲得超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

TA貢獻1757條經(jīng)驗 獲得超8個贊
我的猜測是,這是一個時間增量,您可以獲取秒數(shù)并將其轉(zhuǎn)換為小時數(shù),如下所示
df.loc[df['number_of_hrs'].str.lower().contains('day'), 'number_of_hrs'] = df['number_of_hrs'].seconds//3600

TA貢獻1886條經(jīng)驗 獲得超2個贊
另一種解決方案:
import pandas as pd import re
數(shù)據(jù):
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))))
添加回答
舉報