Мне нужно найти последнюю дату, предшествующую конкретному тексту в строке для каждой строки в панде. Текст может быть где угодно после даты в строке.
У меня есть CSV-файл, который состоит из двух столбцов. Первый - это ссылочный номер (уникальный в каждой строке), другой - строка, которая может быть разделена запятыми. Похоже на это:
Ref No Audit
abc123 "text1, text2, text3"
abc124 "text1, text2, text3"
Ссылочный номер относится к элементу в базе данных, Аудит - это аудит всех изменений, внесенных в элемент. Каждый разделенный запятыми элемент в тексте - это одно изменение (например, text1 - это изменение, text2 - это изменение и т. Д.). Только когда в новую дату вносятся изменения, дата добавляется в начало части текста. Каждый элемент в столбце Аудит выглядит примерно так:
«01.01.2009 09:15:12 задание 1 выполнено, задание 2 выполнено, задание 3 выполнено, 01.02.2009 15:26:03 задание 4 выполнено, задание 5 выполнено».
Я пытаюсь найти способ определить, когда конкретное задание выполнено. В приведенном выше примере, если бы я хотел знать, когда задача 5 была выполнена, это было бы 02/01 / 2019.
Помимо того, что я перенесу данные в фрейм данных panda и поместу текст Audit в список, я заблудился о том, как это сделать.
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 Джон Смит Поле «Обработчик» было изменено со старого значения «» на новое значение «Джон Доу», поле «Состояние рабочего процесса» изменено со старого значения «Ожидание» присвоение "новому значению" С помощью обработчика ", 27.03 2019 22:24:19 Джейн Доу Поле" Обработчик "было изменено со старого значения" Джейн Доу "на новое значение" Билл Смит ", 10/04/2019 04:58:43 Джилл Смит Поле «Статус рабочего процесса» было изменено со старого значения «С помощью обработчика» на новое значение «Передано в центр очистки», 04.10 2019 06:31:09 Сэм Джонс Поле «Статус рабочего процесса» "было изменено со Старого значения" Передано в Центр очистки "на новое значение" QC ", 13/04/2019 08:30:49 Дейв Джонс Поле" Обработчик QC "было изменено со Старого значения" "на новое значение" Дейв Джонс ", поле" Статус рабочего процесса "изменено со старого значения" QC "на новое значение" QC - With Handler ", 13/04/2019 09:06:36 Дейв Джонс Поле" Статус рабочего процесса "было изменено от старого значения «QC - With Handler» к новому значению «Passed back to re-work», 17/04/201 9 23:52:11 Салли Смит Поле «Статус рабочего процесса» было изменено со старого значения «Передано для повторной обработки» на новое значение «Контроль качества - передано в справочную службу», 18/04/2019 2:45:30 Билл Джонс Поле «Статус рабочего процесса» было изменено со Старого значения «QC - Передано в Центр очистки» на новое значение «Обработка жалоб»
Редактировать 2
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]
Редактировать 3
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)