Как мне изменить дату в соответствии с длиной строки?

#python #pandas #numpy #datetime

#python #панды #numpy #дата и время

Вопрос:

 df = pd.DataFrame({'text':['20201010', '200910', '2015','20']})
df['date'] = np.where(df.date.str.len() == 8, #format = '%Y%m%d',
                      np.where(df.date.str.len() == 6, #format = '%y%m%d'
                               np.where(df.date.str.len() == 4, #format = '%Y',None

 

Я не знаю, как написать код. Я хочу сделать это так.

  df['text']                df['date']

20201010        =>     2020-10-10 00:00:00
200910          =>     2020-09-10 00:00:00
2015            =>     2015-01-01 00:00:00
20              =>     None
 

Ответ №1:

На мой взгляд, здесь не требуется длина теста, вы можете протестировать форматы с errors='coerce' помощью отсутствующих значений, если не удалось, последние форматы объединения по Series.fillna или Series.combine_first :

 f1 = pd.to_datetime(df['text'], format = '%Y%m%d', errors='coerce')                     
f2 = pd.to_datetime(df['text'], format = '%y%m%d', errors='coerce')
f3 = pd.to_datetime(df['text'], format = '%Y', errors='coerce')

df['date'] = f1.fillna(f2).fillna(f3)
#alternative
#df['date'] = f1.combine_first(f2).combine_first(f3)
print (df)
       text       date
0  20201010 2020-10-10
1    200910 2020-09-10
2      2015 2020-01-05
3        20        NaT