Очистить данные о продолжительности времени от Pandas Dataframe - PullRequest
0 голосов
/ 17 сентября 2018

Я анализирую набор данных в формате * .csv, используя Python 2.7.14 и Pandas. Я заинтересован в проведении статистического анализа длительности времени на основе группировки по некоторому атрибуту. Проблема в том, что всякий раз, когда я пытаюсь сгруппировать и применить медиану, я получаю ошибку

TypeError: invalid literal for float(): 00:00:11

Длительность указана в виде строки, формат ЧЧ: ММ: СС. Я пытался преобразовать в timedelta или datetime, но каждый раз появляется ошибка. Мне удалось найти первую строку, выдавшую ошибку в файле csv, изменить значение длительности и заметить, что выброшенная ошибка обновляется соответствующим образом (т.е. 00:00:11 становится тем, что я написал). Ошибка была несколько тысяч строк в исходном CSV. Удаление строки привело к тому, что ошибка переместилась на другую строку, а не на ту, которая была ниже удаленной.

Я застрял: я не могу выполнить автоматический анализ и не могу найти обходной путь, чтобы идентифицировать плохие линии и удалить их.

Я провел некоторое исследование и выяснил, что это обычная тема, но каждое предоставленное решение относится только к одной проблеме, и ни одно из них не соответствует моим потребностям.

Вот последний код, к которому я пришел:

импорт панд импорт numpy

df = pandas.read_csv('log.csv',sep=",", quotechar="\"", names=["attrA","attrB","attrC","attrD","attrE","attrF","attrG","skip1","attrH","attrI","attrJ","attrL","attrM","attrN","attrO","attrP","attrQ","Duration","User","Host"], encoding="utf-8-sig")
group_host = df.groupby('Host')
for host, value in group_host['Duration']:
    print((host, value.median()))

Вот пример набора данных (разумные данные были скрыты):

"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:03:10","userA","hostA"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:00:34","userA","hostB"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:00:54","userA","hostA"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:02:30","userA","hostB"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:03:04","userA","hostA"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:00:44","userA","hostA"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:01:09","userA","hostB"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:00:42","userA","hostA"
"xxx","xxx","xxx","xxx","xxx","xxx","xxx","","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","xxx","00:00:11","userA","hostB"

1) как я могу очистить входные данные? 1a) Я безуспешно пытался добавить df.dropna(subset=['Duration']) и / или pandas.to_timedelta(df.Duration,errors='coerce'). 2) в качестве альтернативы, как я могу вручную идентифицировать линии и удалить их?

Примечание: набор данных был агрегирован из нескольких разных файлов с использованием автоматического сценария. Плохие строки не находятся ни в начале, ни в конце файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...