Как изменить формат даты и времени для разных дат в кадре - PullRequest
0 голосов
/ 10 мая 2019

Этот вопрос относится к теме Как изменить формат даты и времени в пандах

Представленные там решения работают нормально для одной даты, но что, если у вас разные даты в одной и той жеdataframe?

Например, мои даты в datetime:

2016-01-26
2016-01-27
2016-01-28
2016-01-29

Код, как и в другой ветке, где одна и та же дата используется дважды:

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

Я такженашел этот код на (я думаю, что это было) datetime для строки с рядами в пандах Python

df['DOB1'] = df['DOB'].apply(lambda x:x.strftime('%m/%d/%Y'))

И этот:

df['DOB1'] = df['DOB'].map(lambda x:x.strftime('%m/%d/%Y'))

Например, в моемДата-кадр DOB У меня есть следующие даты, и я хотел бы иметь их в другом формате.

Мои даты в формате Datetime:

0  2016-01-26
1  2016-01-27
2  2016-01-28  
3  2016-01-29  

Желаемый вывод:

01/26/2016
01/27/2016
01/28/2016
01/29/2016

Я использовал те же коды, что и выше, но когда я их запускаю (нетнезависимо от того, какой из кодов) ВСЕ даты превращаются в

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

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Спасибо, что заглянули в это.Я поймал свою ошибку, и это немного смущает, но я хочу оставить здесь вопрос - также показать другим новичкам, где можно пойти не так, не поймав сначала ошибку.Я также должен любезным людям, которые предоставили ответ, объяснение.

Это правда, что я действительно использовал приведенный выше код в качестве примера.НО в моем коде я забыл включить% d в strftime.Поэтому, конечно, даты типа

2016-01-26
2016-01-27
2016-01-28
2016-01-29

будут преобразованы в

2016\01
2016\01
2016\01
2016\01

Однако, только когда Н. Арунопрайох ответил, я увидел это !!!Интересно, как я мог это пропустить?

Извините, еще раз спасибо за вашу помощь!

0 голосов
/ 10 мая 2019

Я запускаю ваш код, и результаты соответствуют вашим ожиданиям.

import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '27/1/2016', 2: '28/1/2016'}})
df['DOB'] = pd.to_datetime(df.DOB)
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')

Результат:

         DOB        DOB1
0 2016-01-26  01/26/2016
1 2016-01-27  01/27/2016
2 2016-01-28  01/28/2016

Не зная более подробной информации, я бы предложил вам создать функцию и применитьэто к вашей колонке.

convert_date = lambda i: i.strftime('%m/%d/%Y')
df['DOB'].apply(convert_date)

0    01/26/2016
1    01/27/2016
2    01/28/2016
...