Поместите фрейм данных в хронологическом порядке 'dd.mm.yyyy', используя pandas - PullRequest
0 голосов
/ 31 марта 2020

У меня есть csv-файл с несколькими столбцами, один из которых содержит дату в формате dd.mm.yyyy. Его записи (строки) не в хронологическом порядке. Чтобы упорядочить их, я сделал преобразование этих значений, используя pd.to_datetime, а затем sort_values. (Код ниже).

Желаемый вывод: 01.09.2019, 02.09.2019, 03.09.2019, ...., 30.03.2020

Однако я получаю: 01.01.2020, 01.02.2020, 01.09.2019, 01.11.2019, ..., 31.12.2019

daten = pd.read_csv("gewichtstagebuch.csv", sep=";", decimal=",",
                usecols=("Datum","Gewicht (kg)"))
pd.to_datetime(daten['Datum'])
daten.sort_values(by="Datum", ascending= True)

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

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

pd.to_datetime возвращает datetime и, следовательно, не обновляет ваш daten фрейм данных. Поэтому сортировка не работает должным образом.

Попробуйте выполнить следующее:

daten = pd.read_csv("gewichtstagebuch.csv", sep=";", decimal=",",
                usecols=("Datum","Gewicht (kg)"))
daten = daten.assign(Datum=lambda x: pd.to_datetime(x.Datum)) # this returns a new dataframe
daten.sort_values(by="Datum", ascending= True)
0 голосов
/ 01 апреля 2020

Для тех, у кого такая же или похожая проблема - решение, предложенное smci, решило проблему:

daten = pd.read_csv("gewichtstagebuch.csv", sep=";", decimal=",", parse_dates=[0],
                infer_datetime_format= True, dayfirst=True,
                usecols=("Datum","Gewicht (kg)"))
daten.sort_values(by="Datum", ascending= True)

Итак, сочетание parse_dates, infer_datetime_format и dayfirst. Теперь я получаю желаемый заказ:

2019-09-01
2019-09-02
2019-09-03
2019-09-04
...

0 голосов
/ 31 марта 2020

Во время чтения данных с использованием pandas вы можете использовать аргумент "parse_dates", который автоматически преобразует поле в datetime.

daten = pd.read_csv("prob_data.csv", sep=",", decimal=",", parse_dates=[0],
                usecols=("Datum","Gewicht (kg)"))

daten.sort_values(by="Datum", ascending= True)

В приведенном выше коде я упомянул parse_dates=[0] с учетом first (0) column - столбец даты. Как только мы загрузим данные, он автоматически преобразует столбец в столбец даты.

Теперь, если вы запустите код для сортировки кадра данных, он соответствующим образом отсортирует набор данных.

Надеюсь, это поможет.

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