【问题标题】:Convert content of Object datatype to Date datatype in Python在 Python 中将 Object 数据类型的内容转换为 Date 数据类型
【发布时间】:2016-09-27 09:06:23
【问题描述】:

我使用 Jupyter Notebook、Pandas 框架和 Python 作为编程语言。 我有一个具有以下形状的数据框 (10500, 4)。所以它有 4 列和 10500 条记录。 Initial_Date 是对象数据类型的 4 列之一。这是它包含的信息类型:

Initial_Date
1971
11969
102006
03051992
00131954
27001973
45061987
1996

很容易将列的格式确定为 DDMMYYYY(03051992 是 1992 年 5 月 3 日)

注意:如您所见,有invalid MM(00 和13)和invalid DD(00 和45)。 p>

我想使用正则表达式来提取该字段中可用的任何内容。我不知道如何分别阅读 YYYY 到 MM 或 DD,所以请在此赐教。提取发生后,我想测试一下 YYYY、DD 和 MM 是否有效。如果其中任何一个无效,则分配 NaT,否则分配 DD-MM-YYYY 或 DD/MM/YYYY(不要对结束格式挑剔)。

例如: 051992 被视为无效,因为它变成了 DD/05/1992

包含完整 8 位数字的字段,例如 10081996 被视为有效 10/08/1996

附言。我开始使用 Pandas、Jupyter notebook 并放慢恢复我的 Python 技能。仅供参考,如果你们认为有更好的方法将每个字段转换为有效的 Date 数据类型,那么请赐教。

【问题讨论】:

    标签: python date pandas type-conversion jupyter


    【解决方案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
    

    【讨论】:

    • 非常感谢 MaxU!对延迟回复表示歉意。这工作得很好,除了我需要将格式从 %m%d%Y 更改为 %d%m%Y
    • @Timetraveller,总是乐于助人!感谢您接受答案!
    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 2014-01-19
    • 2020-06-17
    • 1970-01-01
    • 2013-07-06
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多