gpt4 book ai didi

python - 如何从 panda 数据框中的字符串中提取最后日期

转载 作者:太空宇宙 更新时间:2023-11-03 20:59:55 25 4
gpt4 key购买 nike

我需要找到 panda 数据框中每一行的字符串中特定文本之前的最后一个日期。文本可以位于字符串中日期之后的任意位置。

我有一个由两列组成的 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。

除了将数据放入 panda 数据框并将审核文本放入列表之外,我不知道如何执行此操作。

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 Jo​​hn Smith 字段“处理程序”已从旧值“”更改为新值“John Doe”,字段“工作流程状态”已从旧值“等待”更改分配”为新值“With Handler”,27/03/2019 22:24:19 Jane Doe 字段“Handler”已从旧值“Jane Doe”更改为新值“Bill Smith”,10/04/2019 04:58:43 Jill Smith “工作流程状态”字段已从旧值“使用处理程序”更改为新值“传递到清算台”,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 - 带处理程序”,13/04/2019 09:06:36 Dave Jones 字段“工作流程状态”已更改从旧值“QC - 带处理程序”更改为新值“传回重新工作”,17/04/2019 23:52:11 Sally Smith 字段“工作流程状态”已从旧值“传回重新工作”更改-工作”更改为新值“QC - 已传递至清算台”,2019 年 4 月 18 日 2:45:30 Bill Jones 字段“工作流程状态”已从旧值“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)

最佳答案

严格前提是您感兴趣的日期将位于第一部分中,并且每行的第一个文本中始终会有一个日期,生成以下代码

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']

关于python - 如何从 panda 数据框中的字符串中提取最后日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55774156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com