Python 如何根据字符串的长度更改日期?
我不知道怎么写代码。我想把它做成这样Python 如何根据字符串的长度更改日期?,python,pandas,numpy,datetime,Python,Pandas,Numpy,Datetime,我不知道怎么写代码。我想把它做成这样 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'
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
在我看来,这里没有必要测试长度,您可以使用
errors='concurve'
测试缺少值的格式。如果失败,请使用或最后组合格式:
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
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