我有一个数据集,其中“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”也必须显示。
任何帮助都将受到高度赞赏。 谢谢。