Преобразование дат в формат %y-%m-%d в Python

#python #pandas #dataframe #datetime-format

#python #pandas #фрейм данных #datetime-формат

Вопрос:

У меня есть csv-файл со столбцом «дата», который содержит даты во многих разных форматах, таких как ddmmyy, mmddyy, yymmdd. Я хочу преобразовать все даты в формат y-m-d.

 df=pd.read_csv(file)
df=df['date] .dt.strftime(%y-%m-%d)
 

Этот код выдает ошибку: «Можно использовать только .dt accessor со значениями, подобными datetimelike»

введите описание изображения здесь

Ответ №1:

Шаг 0:-

Ваш dataframe :-

 df=pd.read_csv('your file name.csv')
 

Шаг 1:-

сначала преобразуйте ваш столбец «дата» в datetime с помощью to_datetime() метода:-

 df['date']=pd.to_datetime(df['date'])
 

Шаг 2:-

И если вы хотите преобразовать их в string подобный формат, используйте:-

 df['date']=df['date'].astype(str)
 

Теперь, если вы печатаете df или пишете df (если вы используете jupyter notebook)

 Output:-

0    2020-01-01
1    2020-12-31
2    2020-06-20
 

Комментарии:

1. Спасибо. Как сортировать по дате в этом случае?

2. Просто используйте df.sort_values(by='date',ascending=True) и, если хотите sort , в порядке убывания, затем установите ascending=False в sort_values() метод…………. кстати, если этот ответ помог вам, попробуйте рассмотреть возможность принятия этого ответа

3. На выходе получается 20-01-01. Вместо этого я хочу 2020-01-01. Кажется, что dt.strftime(%y-%m-%d) обрезает часть года. Есть ли способ получить вывод как 2020-01-01?

4. Да, просто используйте df['date']=df['date'].astype(str) его, чтобы преобразовать ваш столбец «дата» в Object тип, и вы получите 2020-01-01 в качестве вывода

5. Извините, куда это вставить? Я попытался вставить его перед pd.to_datetime, чтобы он преобразовывал дату в строку, а также в конец. но это выдает ошибку: можно использовать только .dt accessor со значениями, подобными datetimelike

Ответ №2:

Вы можете использовать pd.to_datetime

 >>> import pandas as pd
>>> 
>>> df = pd.DataFrame(['1/2/2020','12/31/2020','20-Jun-20'],columns=['Date'])
>>> df
         Date
0    1/2/2020
1  12/31/2020
2   20-Jun-20
>>> 
>>> df['Date'] = pd.to_datetime(df['Date'])
>>> df
        Date
0 2020-01-02
1 2020-12-31
2 2020-06-20
>>> 
>>> df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%y-%m-%d')
>>> 
>>> df
       Date
0  20-01-02
1  20-12-31
2  20-06-20
>>>