我需要在熊猫数据框中的每一行的字符串中找到特定文本之前的最后日期。文本可以在字符串中日期之后的任何位置。
我有一个由两列组成的csv文件。第一个是参考编号(每行唯一),另一个是可以用逗号分隔的字符串。与此类似:
Ref No Audit
abc123 "text1, text2, text3"
abc124 "text1, text2, text3"
参考编号是指数据库中的项目,审核是对项目所做的所有更改的审核。文本中每个逗号分隔的项目都是单个更改(例如,text1是更改,text2是更改等)。仅当在新日期上进行更改时,才在文本部分的开头附加日期。“审核”列中的每个项目如下所示:
“ 01/01/2019 09:15:12任务1已完成,任务2已完成,任务3已完成,02/01/2019 15:26:03任务4已完成,任务5已完成”。
我试图找到一种方法来识别特定的任务何时完成。在上面的示例中,如果我想知道任务5何时完成,那就是02/01/2019。
除了将数据放入熊猫数据框并将“审核”文本放入列表之外,我对如何执行此操作也一无所知。
import pandas as pd
audit = pd.read_csv('audit_export1.csv', encoding='latin1')
audit['Audit'].apply(pd.Series)
audit['Audit'] = audit['Audit'].str.split(',')
我希望得到一个包含2列的数据框;搜索的参考和更改日期。
很抱歉在我对问题的措辞上有任何错误或明显错误,我对python还是很陌生,所以非常感谢您能提供的任何帮助。我查看了先前提出的问题,但找不到任何能解决该问题的信息,但这可能是由于我缺乏知识而无法归纳指导。
27/03/2019 09:34:41 John Smith字段“ Handler”已从旧值“”更改为新值“ John Doe”,字段“ Workflow Status”已从旧值“ Awaiting分配”更改为新值“ With Handler”,27/03/2019 22:24:19 Jane Doe字段“ Handler”已从旧值“ Jane Doe”更改为新值“ Bill Smith”,10/04/2019 04:58 :43 Jill Smith字段“工作流状态”已从旧值“ With Handler”更改为新值“ Passed to Clearing Desk”,10/04/2019 06:31:09 Sam Jones字段“工作流状态”已被更改从旧值“ Passed to Clearing Desk”更改为新值“ QC”,13/04/2019 08:30:49 Dave Jones字段“ QC Handler”已从旧值“”更改为新值“ Dave Jones”,字段“工作流状态”已从旧值“ QC”更改为新值“ QC-With Handler”,13/04/2019 09:06: 36 Dave Jones字段“ Workflow Status”已从旧值“ QC-With Handler”更改为新值“ Passed back to re-work”,17/04/2019 23:52:11 Sally Smith字段“ Workflow Status” “已从旧值“传递回返工”更改为新值“ QC-传递到清算台”,18/04/2019 2:45:30 Bill Jones字段“工作流状态”已从旧值更改值“ QC-传递给清算台”更改为新值“投诉处理”已从旧值“ QC”更改为新值“ QC-有处理程序”,13/04/2019 09:06:36 Dave Jones字段“工作流状态”已从旧值“ QC-有处理程序”更改为新值“传回返工”,17/04/2019 23:52:11 Sally Smith字段“工作流状态”已从旧值“传回返工”更改为新值“ QC-通过到清算台”,18/04/2019 2:45:30 Bill Jones字段“工作流状态”已从旧值“ QC-传递到清算台”更改为新值“投诉处理”已从旧值“ QC”更改为新值“ QC-有处理程序”,13/04/2019 09:06:36 Dave Jones字段“工作流状态”已从旧值“ QC-有处理程序”更改为新值“传回返工”,17/04/2019 23:52:11 Sally Smith字段“工作流状态”已从旧值“传回返工”更改为新值“ QC-通过到清算台”,18/04/2019 2:45:30 Bill Jones字段“工作流状态”已从旧值“ QC-传递到清算台”更改为新值“投诉处理”QC-使用处理程序”更改为新值“传递回返工”,17/04/2019 23:52:11 Sally Smith字段“工作流状态”已从旧值“传递回返工”更改为新值“ QC-传递到清算台”,18/04/2019 2:45:30 Bill Jones字段“工作流状态”已从旧值“ QC-传递到清算台”更改为新值“投诉处理”QC-使用处理程序”更改为新值“传递回返工”,17/04/2019 23:52:11 Sally Smith字段“工作流状态”已从旧值“传递回返工”更改为新值“ QC-传递到清算台”,18/04/2019 2:45:30 Bill Jones字段“工作流状态”已从旧值“ QC-传递到清算台”更改为新值“投诉处理”投诉处理”投诉处理”
import pandas as pd
import re
a = pd.read_csv('audit_export1.csv')
to_find = "Workflow Status"
for cases in a:
date_list = re.findall(r'\d+/\d+/\d+ \d+:\d+:\d+ ', a['Audit Trail'])
s = re.split(r'\d+/\d+/\d+ \d+:\d+:\d+ ', a['Audit Trail'])
task_list = [i for i in s if i != '']
for i, item in enumerate(task_list):
if to_find in item:
a['Audit Date'] = date_list[i]
import pandas as pd
from datetime import datetime
to_find = 'Workflow'
a = pd.read_csv('audit_export2.csv')
a.Audit = a.Audit.str.split(',')
overall_list = []
for tmplist in a.Audit:
dl = []
for i in tmplist:
i = i.strip()
try:
sdate = datetime.strptime(i[:10],'%d/%m/%Y')
dl.append(str(sdate) + i[10:])
except ValueError: # if its NOT a date, adding the date got from the try block to the string
dl.append(str(sdate) + i)
dl = dl[::-1]
overall_list.append(dl)
a['Audit_date'] = pd.Series(overall_list)
严格在您感兴趣的日期位于第一部分的前提下,并且每一行的第一行文本中始终会有一个日期,将产生以下代码
import pandas as pd
from datetime import datetime
a = pd.read_csv('audit_export1.csv')
a.Audit = a.Audit.str.split(',')
overall_list = []
for tmplist in a.Audit:
dl = []
for i in tmplist:
i = i.strip()
try:
sdate = datetime.strptime(i[:19],'%d/%m/%Y %H:%M:%S')
dl.append(str(sdate) + i[19:])
except ValueError: # if its NOT a date, adding the date got from the try block to the string
dl.append(str(sdate) + i)
overall_list.append(dl)
a['Audit_date'] = pd.Series(overall_list)
我试图在没有日期的字符串中复制日期部分,并创建一个新列,并将日期插入到字符串的前面。您可以根据需要使用结果列表。例如输出如下
print(a.Audit_date[0])
['2019-01-01 09:15:12 task 1 completed',
'2019-01-01 09:15:12task 2 completed',
'2019-01-01 09:15:12task 3 completed',
'2019-01-02 15:26:03 task 4 completed',
'2019-01-02 15:26:03task 5 completed']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句