我使用Jupyter Notebook,Pandas框架和Python作为编程语言。 我有一个具有以下形状的数据帧(10500,4)。所以它有4列和10500条记录。 Initial_Date是4列中的一列,它是Object数据类型。这是它包含的信息类型:
Initial_Date
1971
11969
102006
03051992
00131954
27001973
45061987
1996
很容易看出列的格式为DDMMYYYY(03051992是1992年5月3日)
注意:正如您所看到的,无效的MM (00和13)以及无效的DD (00和45)。
我想使用正则表达式来提取字段中可用的内容。我不知道如何分别阅读YYYY到MM或DD,所以请在这里赐教。提取完成后,我想测试YYYY,DD和MM是否有效。如果其中任何一个无效,则分配NaT,否则为DD-MM-YYYY或DD / MM / YYYY(对于结束格式不要挑剔)。
例如: 051992被视为无效,因为这将成为DD / 05/1992
具有完整8位数的字段(例如10081996)被视为有效10/08/1996
PS。我开始使用Pandas,Jupyter笔记本并且放慢了我的Python技能。仅供参考如果您认为有更好的方法将每个字段转换为有效的Date数据类型,请赐教。
答案 0 :(得分:1)
你可以这样做:
result = pd.to_datetime(d.Initial_Date.astype(str), dayfirst=True, errors='coerce')
result.ix[result.isnull()] = pd.to_datetime(d.Initial_Date.astype(str), format='%d%m%Y', dayfirst=True, errors='coerce')
#format is set to %d%m%Y
结果:
In [88]: result
Out[88]:
0 1971-01-01
1 NaT
2 2006-10-20
3 1992-03-05
4 1954-01-03
5 NaT
6 NaT
7 1996-01-01
Name: Initial_Date, dtype: datetime64[ns]
原始DF
In [89]: d
Out[89]:
Initial_Date
0 1971
1 11969
2 102006
3 3051992
4 131954
5 27001973
6 45061987
7 1996