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
我认为这不是必要的测试长度,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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句