#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
>>>