Как изменить формат даты и времени в pandas

Значение образца столбца DOB находится в формате - 1/1/2016, который по умолчанию преобразуется в объект, как показано ниже

DOB       object

Преобразование формата даты

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

Дата конвертируется в

2016-01-26

dtype

DOB       datetime64[ns]

Теперь я хочу преобразовать этот формат даты в 01/26/2016 или в любые другие общие форматы даты. Как это сделать?

Какой бы метод я ни старался, он всегда показывает дату в формате 2016-01-26.

Ответы

Ответ 1

Вы можете использовать dt.strftime если вам нужно конвертировать datetime в другие форматы (но учтите, что тогда dtype столбца будет object (string)):

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}})
print (df)
         DOB
0  26/1/2016 
1  26/1/2016

df['DOB'] = pd.to_datetime(df.DOB)
print (df)
         DOB
0 2016-01-26
1 2016-01-26

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
         DOB        DOB1
0 2016-01-26  01/26/2016
1 2016-01-26  01/26/2016

Ответ 2

Изменение формата, но не изменение типа:

df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))

Ответ 3

По сравнению с первым ответом я рекомендую сначала использовать dt.strftime(), а затем pd.to_datetime(). Таким образом, это все равно приведет к типу данных datetime.

Например,

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '})
print(df.dtypes)

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print(df.dtypes)

df['DOB1'] = pd.to_datetime(df['DOB1'])
print(df.dtypes)

Ответ 4

У меня вопрос: а что, если у меня разные даты?

Например:

0  26/1/2016 
1  26/2/2016
2  26/3/2016 
3  26/4/2016

Когда я запускаю ваши предложения, они все превращаются в

01/26/2016
01/26/2016
01/26/2016
01/26/2016

Кажется, что pandas принимает первое значение и применяет его к остальной части кадра данных. Как я могу заставить панд читать и конвертировать каждую из дат?

Спасибо!

Ответ 5

Приведенный ниже код работает для меня вместо предыдущего - попробуйте!

df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')

Ответ 6

Ниже код изменяется на тип "время данных", а также форматируется в заданной строке формата. Работает хорошо!

import pandas as pd

df['DOB']=pd.to_datetime(df['DOB'].dt.strftime('%Y-%m-%d'))