从datafram中选择特定日期

2024-04-26 10:50:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有“Date”列的数据集,它有多种格式的日期,包括:

  • 2018年5月7日
  • 2018年6月1日
  • 报告日期:2018年6月1日
  • 2018年6月
  • 2018年
  • 1970年以前
  • 1941-1945年
  • 约1960年

也存在无效日期,例如:

  • 2010年2月19日

我试图找到有确切日期(日、月、年)的日期,并将它们转换为datetime。我还需要排除字段中带有“Reported”的日期。有没有什么方法可以过滤这些数据而不查找所有可能的日期格式?你知道吗


Tags: 数据方法datetimedate格式报告reported
2条回答

使用dateutil库。你知道吗

如果要检查日期的任何部分(月、年、日期)是否丢失,如果是,则避免。你知道吗

如果要从字符串(如“Reported 01 Jun 2018”)中提取日期,请使用fuzzy=True

    import dateutil.parser
    dates = ["2018.05.07","01-Jun-2018","Reported 01 Jun 2018","Jun 2018","2018","before 1970","1941-1945","Ca. 1960","190Feb-2010"]
    formated_date = []
    for date in dates:
        try:
            if dateutil.parser.parse(date,fuzzy=False,default=datetime.datetime(2015, 1, 1)) == dateutil.parser.parse(date,fuzzy=False,default=datetime.datetime(2016, 2, 2)):
                formated_date.append(yourdate)
        except:
            continue

另一个解决方案。这是蛮力方法,检查每一个格式的日期。继续添加更多的格式,使它在任何日期格式的工作。但这是一种耗时的方法。你知道吗

import datetime

dates = ["2018.05.07","01-Jun-2018","Reported 01 Jun 2018","Jun 2018","2018","before 1970","1941-1945","Ca. 1960","190Feb-2010"]

formats = ["%Y%m%d","%Y.%m.%d","%Y-%m-%d","%Y/%m/%d","%Y%a%d","%Y.%a.%d","%Y-%a-%d","%Y%A%d","%Y.%A.%d","%Y-%A-%d",
          "%d-%m-%Y","%d.%m.%Y","%d%m%Y","%d/%m/%Y","%d-%b-%Y","%d%b%Y","%d.%b.%Y","%d/%b/%Y"]

formated_date = []
for date in dates:
    for fmt in formats:
        try:
            dt = datetime.datetime.strptime(date,fmt)
            formated_date.append(dt)
        except:
            continue
In [1]: string_with_dates = """entries are due by January 4th, 2017 at 8:00pm created 01/15/2005 by ACME Inc. and associates."""

In [2]: import datefinder

In [3]: matches = datefinder.find_dates(string_with_dates)

In [4]: for match in matches:
   ...:     print match


2017-01-04 20:00:00
2005-01-15 00:00:00

希望这能帮助你从日期字符串中找到日期

相关问题 更多 >