Python сортировка CSV по дате и времени - PullRequest
0 голосов
/ 27 февраля 2019

Хорошо, поэтому у меня есть файл CSV в формате:

   1 | Thu Oct 04 21:47:53 GMT+01:00 2018 | 35.3254
   2 | Sun Oct 07 09:32:11 GMT+01:00 2018 | 45.7824
   3 | Mon Oct 01 01:00:44 GMT+01:00 2018 | 94.1246

  ...

3023 | Sat Oct 23 01:00:44 GMT+01:00 2018 | 67.2007

Я хочу отсортировать по дате и времени, чтобы получить что-то вроде:

...

456 | Oct 16 23:25:06 | 45.6547
457 | Oct 16 23:29:21 | 64.3453
458 | Oct 16 23:34:17 | 27.6841
459 | Oct 16 23:40:04 | 78.6547
460 | Oct 16 23:44:18 | 11.6547
461 | Oct 16 23:49:22 | 34.6547
462 | Oct 16 23:54:15 | 37.6547
463 | Oct 17 00:00:20 | 68.6547
464 | Oct 17 00:05:06 | 07.6547
465 | Oct 17 00:09:15 | 13.6547
466 | Oct 17 00:14:45 | 37.6547
467 | Oct 17 00:19:26 | 84.6547

...

Дата и времяв отвратительном формате, поэтому я попробовал следующее:

df = pd.read_csv(file, header=None, engine='c', delimiter=',' )

for index, row in df.iterrows():
    result = sorted(df.iterrows(),key=lambda row: datetime.strptime((str(row[1]))[9:24], "%b %d %H:%M:%S"))

print (result)

([9:24] должен позволить мне соединить строку, чтобы получить только Oct 16 23:29:21 например)

Я получаю сообщение об ошибке:

ValueError: time data 'ame: 0, dtype: ' does not match format '%b %d %H:%M:%S'

Я думаю, что моя проблема в том, что я правильно получаю доступ к строке, но не могу получить доступ к значению даты самостоятельно (2-й элемент строки), поэтому сортировкане работает.

Любая идея будет высоко ценится!спасибо

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать параметр infer_datetime_format.Пример с вашими примерами данных ниже:

>> df['date'] = pd.to_datetime(df.date, infer_datetime_format = True)
>> df.sort_values(by = 'date', ascending = True, inplace = True)
>> df.date
2   2018-10-01 02:00:44
0   2018-10-04 22:47:53
1   2018-10-07 10:32:11
3   2018-10-23 02:00:44
Name: date, dtype: datetime64[ns]

From pandas.to_datetime () Документация:

infer_datetime_format: логическое значение, по умолчанию False

Если задано значение True, а формат не задан, попытайтесь определить формат строк даты и времени, и, если это можно сделать, переключитесь на более быстрый метод их анализа.В некоторых случаях это может увеличить скорость анализа на ~ 5-10х.

0 голосов
/ 27 февраля 2019

Попробуйте этот синтаксический анализатор даты:

from dateutil.parser import parse
print(parse(timestr=('Thu Oct 04 21:47:53 GMT+01:00 2018'), dayfirst=False,fuzzy_with_tokens=True)[0])
0 голосов
/ 27 февраля 2019

используйте strftime перед сортировкой данных

import pandas as pd

df = pd.DataFrame({'Date': ['Thu Oct 04 21:47:53 GMT+01:00 2018','Sun Oct 07 09:32:11 GMT+01:00 2018']})
df['Clean_Date'] = df.Date.apply(lambda x: pd.to_datetime(x).strftime('%b %d %H:%M:%S'))

print(df)
                             Date       Clean_Date
0  Thu Oct 04 21:47:53 GMT+01:00 2018  Oct 04 21:47:53
1  Sun Oct 07 09:32:11 GMT+01:00 2018  Oct 07 09:32:11
0 голосов
/ 27 февраля 2019

Вы можете использовать parse_dates при чтении CSV для преобразования в объект даты и времени.

Пример:

import pandas as pd

df = pd.read_csv(filename, names=["Date", "Col"], sep="|", parse_dates=["Date"])
df.sort_values(["Date"], inplace=True)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...