Я пытаюсь преобразовать столбец данных pandas данных продолжительности ISO 8601 в общее количество секунд. Значения продолжительности выглядят как PT7M7S
, что означает 7 минут и 7 секунд. isodate 0.5.4 эффективен при разборе одной строки, если я использую что-то вроде isodate.parse_duration("PT7M7S")
. Однако мне нужно запустить ту же команду в столбце pandas, и я понятия не имею, как это сделать. Я пробовал isodate.parse_duration(df2['duration'])
, но он возвращает TypeError: Expecting a string
.
Следующий код создает тестовый фрейм данных:
df = ["PT7M7S", "PT7M14S", "PT6M45S"]
df = pd.DataFrame.from_dict(df)
names = df.columns.tolist()
names[names.index(0)] = 'duration'
df.columns = names
Это код, который я пробовал, но не был эффективным:
import isodate
dur = isodate.parse_duration(df['duration'])
df['duration'] = dur.total_seconds()
Идеальным выходом было бы иметь столбец duration
, состоящий из общего количества секунд, соответствующих этой строке. Так, например, вместо первой строки, имеющей PT7M7S
, она будет читаться 427
.
Я ценю любую помощь. Спасибо.
dur = df2['duration'].apply(isodate.parse_duration)
должно работать, но может быть быстрее просто проанализировать строку, чтобы извлечь компоненты минут и секунд, а затем просто выполнить арифметические действия с этими извлеченными значениями, если у вас много строк для анализа. - person EdChum   schedule 05.11.2016hh:mm:ss
, а не в общее количество секунд, но я могу с этим работать. Я действительно ценю твою помощь. Если вы хотите отправить это как ответ, я могу выбрать его как принятый ответ. - person Maxwell Poole   schedule 05.11.2016