为此,我是python新手。我正在研究一个脚本,用于每月自动进行网站停机报告过程。我已经成功构建了一个脚本,该脚本使用Beautifulsoup抓取了我们的监视站点,并将数据拉入了pandas数据框。数据帧的“持续时间”(Duration)列列出了停机时间,在被抓取时以“ 6分钟”或“ 1小时5分钟”的形式出现。我已经能够从小于1小时的值中剥离“分钟”,并且能够将其转换为整数以进行数学运算。
大于1小时的值给我带来了问题。我首先从末尾剥离了“ Minutes”字符串,使我剩下“ 1 Hour 5”:
df["Duration"] = df["Duration"].str.replace(" Minutes", "")
然后我尝试将“ Hour”切换为数学表达式,并希望默认情况下它会给我“ 65”,但是当我尝试导出数据框时,它只是给我字符串“ 1 * 60 + 5”到Excel工作表。
df["Duration"] = df["Duration"].str.replace(" Hour ", "*60+")
我是否可以通过“持续时间”(Duration)列进行解析,找到其中包含“小时”的任何值,然后将其转换为自动以“分钟”总和输出值的数学表达式?
样本数据:
答案 0 :(得分:0)
(更新后的答案以反映新信息。)
# Sample data:
ddict = {
'Record': [1, 2, 3, 4],
'Duration': ['1 Hour 5 Minutes',
'2 Hours 1 Minute',
'2 Hours 45 Minutes',
'7 Minutes']
}
df = pd.DataFrame(ddict)
### Replace plurals in 'Duration' using regular expression option in pandas.Series.replace()
df['Duration'] = df['Duration'].replace(r'Hours', 'Hour', regex=True).replace(r'Minutes', 'Minute', regex=True)
### Iterate the dataframe index; Check if 'Hour' in 'Duration' value for each row; Calculate total time
for i in df.index:
if 'Hour' in df['Duration'][i]:
df.loc[i, 'Duration'] = (int(df['Duration'][i].split('Hour')[0].strip()) * 60) + int(df['Duration'][i].split('Hour')[1].replace('Minute', '').strip())
else:
df.loc[i, 'Duration'] = int(df['Duration'][i].split('Minute')[0].strip())
输出:
Record Duration
0 1 65
1 2 121
2 3 165
3 4 7