Преобразование столбца дат из порядковых номеров в стандартный формат даты — pandas

#python #pandas #dataframe

#python #pandas #Дата #целое число #вычисляемые столбцы

Вопрос:

Мне нужно преобразовать столбец дат из целочисленного формата / даты в формат даты d-m-Y. Пример:

 import pandas as pd
col1 = [737346, 737346, 737346, 737346, 737059, 737346]
col2 = ['cod1', 'cod2', 'cod3', 'cod4', 'cod1', 'cod2']
dict = {'V1' : col1, 'V2' : col2}   
df = pd.DataFrame.from_dict(dict)

df

       V1    V2
0  737346  cod1
1  737346  cod2
2  737346  cod3
3  737346  cod4
4  737059  cod1
5  737346  cod2
  

ожидаемый:

 df
           V1    V2
0  14-10-2019  cod1
1  14-10-2019  cod2
2  14-10-2019  cod3
3  14-10-2019  cod4
4  31-12-2018  cod1
5  14-10-2019  cod2
  

Ответ №1:

datetime fromordinal должно помочь.

 import datetime as dt

col1 = [737346, 737346, 737346, 737346, 737059, 737346]
col2 = ['cod1', 'cod2', 'cod3', 'cod4', 'cod1', 'cod2']
dd = {'V1' : col1, 'V2' : col2}   
df = pd.DataFrame.from_dict(dd)

df['V1'] = df['V1'].apply(dt.datetime.fromordinal)
  

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

1. Еще лучше df['V1'] = df['V1'].apply(dt.datetime.fromordinal).dt.strftime('%d-%m-%Y') получить желаемый формат даты и времени

2. @yatu date.fromordinal принимает int в качестве входных данных

Ответ №2:

Просто pandas Timestamp.fromordinal

 df.V1.map(pd.Timestamp.fromordinal)
Out[511]: 
0   2019-10-14
1   2019-10-14
2   2019-10-14
3   2019-10-14
4   2018-12-31
5   2019-10-14
Name: V1, dtype: datetime64[ns]
  

Ответ №3:

Вы можете использовать date.fromordinal для этого.

 from datetime import datetime as dt

df['V1'] = df.V1.apply(lambda x: dt.fromordinal(x)).dt.strftime('%d-%m-%Y')

print(df)
           V1    V2
0  14-10-2019  cod1
1  14-10-2019  cod2
2  14-10-2019  cod3
3  14-10-2019  cod4
4  31-12-2018  cod1
5  14-10-2019  cod2
  

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

1. Я получил эту ошибку: ValueError: порядковый номер должен быть> = 1 Есть предложения?