У меня есть фреймворк pandas следующим образом:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
Я хочу отсортировать его Date
, но столбец - это просто object
.
Я попытался сделать столбец объектом даты, но столкнулся с проблемой, когда этот формат не является нужным. Нужен формат 2015-02-20,
и т. Д.
Итак, теперь я пытаюсь выяснить, как заставить numpy преобразовать «американские» даты в стандарт ISO, чтобы я мог сделать их объектами дат, чтобы я мог сортировать по ним.
Как мне преобразовать эти американские даты в стандарт ISO, или есть ли более простой метод, который мне не хватает в пандах?
df.Date.astype(np.int64)
должен работать на время эпохиpd.to_datetime(df.Date)[0]
возвращаетсяTimestamp('2015-02-20 00:00:00')
sort
метод был устаревшим и замененsort_values
. После преобразования в объект datetime с помощьюdf['Date']=pd.to_datetime(df['Date'])
df.sort_values(by=['Date'])
Примечание: для сортировки на месте и / или в порядке убывания (самые свежие сначала):
df.sort_values(by=['Date'], inplace=True, ascending=False)
источник
Ответ @JAB быстрый и лаконичный. Но это меняет то, что
DataFrame
вы пытаетесь отсортировать, чего вы можете, а можете и не захотеть.( Примечание : Вы почти наверняка будут хотеть, потому что ваши даты столбцы должны быть даты, а не строка!)
В том маловероятном случае, если вы не хотите преобразовывать даты в даты, вы также можете сделать это по-другому.
Сначала получите индекс из отсортированного
Date
столбца:In [25]: pd.to_datetime(df.Date).order().index Out[25]: Int64Index([0, 2, 1], dtype='int64')
Затем используйте его для индексации оригинала
DataFrame
, не трогая его:In [26]: df.ix[pd.to_datetime(df.Date).order().index] Out[26]: Date Symbol 0 2015-02-20 A 2 2015-08-21 A 1 2016-01-15 A
Магия!
Примечание: для Pandas версий 0.20.0 и более поздних используйте
loc
вместоix
, что теперь не рекомендуется.источник
Данные, содержащие столбец даты, можно прочитать с помощью следующего кода:
После того, как данные будут считаны с использованием указанной выше строки кода, к столбцу, содержащему информацию о дате, можно будет получить доступ,
pd.date_time()
например:pd.date_time(data[date_column], format = '%d/%m/%y')
изменить формат даты согласно требованию.
источник