Python:在Pandas数据框列中求算术字符串

时间:2019-05-04 17:15:33

标签: python pandas dataframe

为此,我是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)列进行解析,找到其中包含“小时”的任何值,然后将其转换为自动以“分钟”总和输出值的数学表达式?

样本数据:

Sampledata

1 个答案:

答案 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