Как изменить формат даты и времени в 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'))