Python: вычисление арифметической строки в столбце Pandas Dataframe - PullRequest
0 голосов
/ 04 мая 2019

В предисловии я новичок в питоне.Я работаю над сценарием для автоматизации процесса отчетности по простоям сайтов каждый месяц.Я успешно создал скрипт, который очищает наш сайт мониторинга с Beautifulsoup и переносит данные в фрейм данных pandas.В столбце «Длительность» информационного блока указано время простоя, и при очистке он отображается как «6 минут» или «1 час 5 минут».Мне удалось убрать «Минуты» из значений <1 часа, и я могу преобразовать это в целое число для работы с математикой.</p>

Значения, превышающие 1 час, вызывают у меня проблемы.Сначала я удалил строку «Минуты» с конца, которая оставляет меня с «1 часом 5»:

df["Duration"] = df["Duration"].str.replace(" Minutes", "")

Затем я попытался переключить «Час» в математическое выражение и надеялся, что это будет по умолчаниюпросто дайте мне "65", но это просто дает мне строку "1 * 60 + 5", когда я пытаюсь экспортировать фрейм данных в таблицу Excel.

df["Duration"] = df["Duration"].str.replace(" Hour ", "*60+")

Можно ли как-то проанализировать столбец «Продолжительность», найти любые значения, в которых есть «Час», и преобразовать их в математическое выражение, которое автоматически выводит значение в «Минутах»"сумма?

ОБРАЗЦЫ ДАННЫХ:

Выборка данных

1 Ответ

0 голосов
/ 04 мая 2019

(обновленный ответ для отражения новой информации.)

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...