【问题标题】:Python - Converting Datetime objects in series while keeping non-date time objects the samePython - 连续转换日期时间对象,同时保持非日期时间对象相同
【发布时间】:2020-04-03 15:28:58
【问题描述】:

我有以下系列:

myseries = pd.Series([' Period : From 1 February 2020 to 31 January 2021',
                         ' Period : 1 January 2020 to 31 December 2020',
                         ' Period 67 months',
                         ' Period: 8 Months'])

我想将有两个日期(只有前两个)的日期时间对象转换为日期时间格式,同时保持其他日期的原始格式。

即-[('02-01-2020', '01-31-2021'), ('01-01-2020', '12-31-2020'), 'Period: 67 Months', 'Period: 8 Months']

我尝试了以下方法,但我得到了一个日期时间对象,用于那些没有正确日期的对象。

for i,v in myseries.iteritems():
    matches = list(datefinder.find_dates(v))
    if len(matches) > 0:
        print(matches)

我已经尝试在 datefinder 的 find_dates() 中使用 staticmethod 参数,这给了我以下信息。我可以使用它,但是我无法提取我需要的对象。

[(datetime.datetime(2020, 2, 1, 0, 0), '1 February 2020'), (datetime.datetime(2021, 1, 31, 0, 0), '31 January 2021')]
[(datetime.datetime(2020, 1, 1, 0, 0), '1 January 2020'), (datetime.datetime(2020, 12, 31, 0, 0), '31 December 2020')]
[(datetime.datetime(2067, 4, 4, 0, 0), '67 mon')]
[(datetime.datetime(2020, 4, 8, 0, 0), '8 Mon')]

我想要的输出是 2 个列表:

date_1 = ['1 February 2020', '1 January 2020', '67 mon', '8 Mon']
date_2 = ['31 January 2021', '31 December 2020', '67 mon', '8 Mon']

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    IIUC:

    myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2] if not pd.isna(x) else [])
    

    基本上是用source参数获取原始日期,然后如果日期列表大于2,则获取前2个。

    如果你想要 date_1 和 date_2:

    date_1 = []
    date_2 = []
    
    dates = myseries.apply(lambda x: [x[1] for x in datefinder.find_dates(x, source=True)][:2])
    for date in dates:
        if len(date)==0:
            date_1.append(np.nan)
            date_2.append(np.nan)
        if len(date)>0:
            date_1.append(date[0])
    
        if len(date)>1:
            date_2.append(date[1])
    
        elif len(date)>0:
            date_2.append(date[0])
    

    【讨论】:

    • 如果没有日期,date_2.append(date[0]) 会给我“列表索引超出范围”。我该如何解决?
    • 刚刚编辑,因为 else 没有说明这个事实,对不起!
    • 谢谢!我只有最后一个问题。如果我的系列中有一些 NaN 值没有附加到列表中,有没有办法包含这些值?因为我想将我的结果附加到系列中
    • 现在看,如果没有任何日期,我将把 Nan 放在 date_1 和 date_2 中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多