Как отсортировать столбец с датами в кадре данных? - PullRequest
1 голос
/ 23 апреля 2020

У меня есть такой фрейм данных:

    SEMANAS      HIDROLOGICAS        METEOROLOGICAS
 0  02042020    36.00583090379008   31.284418529316522
 1  05032020    86.91690962099126   77.01136731748973
 2  12032020    87.31778425655976   77.24180581323434
 3  19032020    59.2201166180758    54.57343110404338
 4  26032020    32.39795918367347   29.049238743116323 

Я использовал этот код для изменения df.SEMANAS на datetime

Semanas_Oper['SEMANAS']=pd.to_datetime(Semanas_Oper['SEMANAS'], format='%d%m%Y').dt.strftime('%d/%m/%Y')

 SEMANAS    HIDROLOGICAS    METEOROLOGICAS
 02/04/2020    36.01           31.28
 05/03/2020    86.92           77.01
 12/03/2020    87.32           77.24
 19/03/2020    59.22           54.57
 26/03/2020    32.4            29.05

Но pd.to_datetime не сортирует даты column df.SEMANAS Можете ли вы сказать мне, как сортировать эти столбцы. 04.02.2020 должен быть в последнем ряду.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Вам нужно отсортировать его в формате datetime64 ns и изменить его на дд / мм / гггг, если хотите

df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y')
df.sort_values(by=['SEMANAS'], inplace=True)
df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y').dt.strftime('%d/%m/%Y')
print(df)

      SEMANAS  HIDROLOGICAS  METEOROLOGICAS
1  05/03/2020     86.916910       77.011367
2  12/03/2020     87.317784       77.241806
3  19/03/2020     59.220117       54.573431
4  26/03/2020     32.397959       29.049239
0  02/04/2020     36.005831       31.284419
2 голосов
/ 23 апреля 2020

dt.strftime() отменяет преобразование даты и времени и возвращает вас к строкам. Если вы выполните сортировку по этому вопросу, вы останетесь с лексикографической сортировкой, а не с тем, что вы хотите, учитывая, что ваш формат '%d/%m/%Y' (было бы хорошо с '%Y/%m/%d').

Когда работает с датами в pandas вы должны сохранить дату и время64 [нс] dtype . Это самый простой способ выполнить все операции с датой и временем. Используйте .strftime только тогда, когда вам нужно перейти к какой-либо другой библиотеке или выходному файлу, для которых требуется очень специфический c формат строки.

df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y')
df.dtypes
#SEMANAS           datetime64[ns]
#HIDROLOGICAS              object
#METEOROLOGICAS            object

df = df.sort_values('SEMANAS')
#     SEMANAS       HIDROLOGICAS      METEOROLOGICAS
#1 2020-03-05  86.91690962099126   77.01136731748973 
#2 2020-03-12  87.31778425655976   77.24180581323434
#3 2020-03-19   59.2201166180758   54.57343110404338 
#4 2020-03-26  32.39795918367347  29.049238743116323 
#0 2020-04-02  36.00583090379008  31.284418529316522
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...