Сортировать строки CSV по времени в формате «03.10 10:06:20» в Python - 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

Несортировано, неудобный формат даты и времени.

Я хочу отсортировать по дате и времени (нет заголовков столбцов, только необработанные данные)

Я использовал следующий код:

temp = [] # to hold dates

df = pd.read_csv(file, header=None, usecols=[1], engine='c')

for row in df.iterrows():

    # grab date and time only
    new = (repr(row[1]))[9:24]
    temp.append(new)
    temp.sort(key=lambda date: datetime.strptime(date, "%b %d %H:%M:%S"))

    i = 0
    while i < len(temp):
        print(temp[i])
        i += 1

Это выводит дату и время в аккуратном формате, который отсортирован:

...

Oct 16 23:25:06
Oct 16 23:29:21
Oct 16 23:34:17
Oct 16 23:40:04
Oct 16 23:44:18
Oct 16 23:49:22
Oct 16 23:54:15
Oct 17 00:00:20
Oct 17 00:05:06
Oct 17 00:09:15
Oct 17 00:14:45
Oct 17 00:19:26

...

Но я изо всех сил пытаюсь записать обратно в CSV и отсортировать все данные по этому столбцу.

Мой желаемый вывод - отредактировать CSV, чтобы получить что-то вроде:

...

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

...

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

1 Ответ

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

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

Это должно сделать это:

result = sorted(df.iterrows(),key=lambda row: datetime.strptime(row[1], "%b %d %H:%M:%S"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...