在Python中将Object数据类型的内容转换为Date数据类型

时间:2016-05-29 13:14:10

标签: python date pandas type-conversion jupyter

我使用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数据类型,请赐教。

1 个答案:

答案 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