re.findall - 从列表中提取日期并将其附加到pandas数据框

时间:2016-08-31 13:55:48

标签: python regex python-2.7

我有一个数据集,其中“PL_email”列包含近650封电子邮件,我想只从每封邮件中提取前三个日期并将其放入新列中。 (注意:日期格式不同)。所以新列应该像每个单元格应该包含三个日期,如果“PL_email”单元格有三个或三个以上的日期,如果它有少于三个日期然后它应该包含相同的,如果一个单元格不包含任何日期然后它应该写成“不匹配”

示例数据已转换为列表:

[“('你可以通过电子邮件发送电子邮件,以便在泳池帐户关闭库存,受益人帐户为k60022'),”  “亲爱的suketaben n patel(客户编号s133552)请将其发送至2015年1月1日至2016年7月16日',)”,  “('我的客户ID是v888。我希望p& l报告2016年3月31日结束我上述帐户。',)”,“('请发送我的2015-16报告,即从2015年3月20日到2016年6月27日')“]

以上列表是我的“PL_email”栏目(我仅提到了几个例子) 下面是我试图提取日期的代码,但是发生的事情是它只取出每个单元格的第一个日期。

我写的代码如下:

df =pd.read_csv(fpath + 'PL_email.csv')
df1 = df['PL_email'].tolist()
dates = []

for element in df1:    
    m = re.findall('(\d{2,4}(/|-)\d{2,4}(/|-)\d{2,4})|(\d{2,4}(/|-)\d{2,4})|(\b\d{8}\b)|(\d{1,2}(/|-|\.)\w{3,9}(/|-|\.)\d+)|([a-z]{3,9}\s\d{2}\s\d+)|(\d{1,2}\s[a-z]{3,9}\s\d+)|(\d+(/|-|\.)\d+(/|-|\.)\d+)', element)
    for x in m:
        if x:
            print x
            dates.append(x)
            break;
    else:
        dates.append('no match')
df['dates'] = dates

df.to_csv(fpath + 'PL_email.csv', index = False)

代码输出: 不配 ('','','','','','','','','','','1.2.2015','','','') ('','','','','','','','','','','','','2016年3月31日','','',' ','','','') ('','','','','','','','','','','2015-16','','','','',' ','','')

上面提到的是CSV中每个单元格的附加输出, 就像第一个没有匹配,这是正确的。 第二只有“1.2.2015”..但“16.07.2016”也必须显示。

任何帮助都将受到高度赞赏。 谢谢。

0 个答案:

没有答案