Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据字符串的长度更改日期?_Python_Pandas_Numpy_Datetime - Fatal编程技术网

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