我正在幫助一個(gè)狗救援組織分析他們收到的收養(yǎng)申請(qǐng)。所有申請(qǐng)均通過在線系統(tǒng)提交,每個(gè)申請(qǐng)都會(huì)獲得一個(gè)自動(dòng)生成的表格 ID。然后,這些申請(qǐng)將被分配給不同的志愿者來處理。大多數(shù)信息都很簡(jiǎn)單,我可以使用 pandas 輕松處理。分析的一部分是關(guān)于每個(gè)應(yīng)用程序的處理時(shí)間。這意味著從申請(qǐng)創(chuàng)建之日(表格狀態(tài)為“已提交”)到狗被收養(yǎng)(表格狀態(tài)為“已收養(yǎng)”)。當(dāng)我導(dǎo)出表單數(shù)據(jù)時(shí),狀態(tài)更改和一般注釋混合在一個(gè)名為“注釋(內(nèi)聯(lián))”的標(biāo)題下。以下是一個(gè)應(yīng)用程序的狀態(tài)更改/評(píng)論的簡(jiǎn)短示例。文本遵循一些基本模式。一般評(píng)論:CURRENT_PERSON(名字)寫于日期:文本志愿者變更:CURRENT_PERSON(名字)于 DATE 寫入:已將表格分配給 NEW_PERSON(名字)表單狀態(tài)更改:CURRENT_PERSON(名字)于日期寫入:狀態(tài)已從 CURRENT_STATUS 更改為 NEW_STATUS我是 python 新手(~3mos)。我想到的第一件事是使用 python 和正則表達(dá)式來解析文本,提取數(shù)據(jù),并將它們分為兩組(一組用于一般注釋,一組用于狀態(tài)更改)。這需要一些時(shí)間,因?yàn)槲胰栽趯W(xué)習(xí),但似乎是可行的。最終的結(jié)果將會(huì)是這樣的。相同的狀態(tài)可以被分配多次,所以我需要給他們一個(gè)號(hào)碼。然后我可以將處理時(shí)間計(jì)算為 Adopted-01 和 Submitted-01 之間的天數(shù)。然而,從我到目前為止所了解到的情況來看,使用這種類型的迭代(for 循環(huán))似乎很慢并且不推薦。到目前為止,我大約有 1500 份表格,而且這個(gè)數(shù)字只會(huì)增加。我應(yīng)該繼續(xù)使用 python 和 re 嗎?還是有更好的方法來獲得我所描述的內(nèi)容?我堅(jiān)信有一種更好的方法,只是我還不夠了解。非常感謝您的建議。更新示例數(shù)據(jù)位于 CSV 文件中,此處位于 XML 文件中你會(huì)在那里找到四個(gè)名字:Jenny White、Rose Burk、Kerry James、Henry Woods。我意識(shí)到文本 CSV 文件并不像我想象的那么干凈。評(píng)論或狀態(tài)更改之間沒有空格。盡管存在模式,但并不總是一致(僅名字與全名)。我更新了模式。導(dǎo)出為 CSV 后,您將看到以下內(nèi)容Henry 于 2020 年 9 月 22 日寫道:已將表格分配給 Rose Burk Rose 于 2020 年 9 月 22 日寫道:已發(fā)送介紹電子郵件。成為Henry 于 2020 年 9 月 22 日寫道:已將表格分配給 Rose BurkRose 于 2020 年 9 月 22 日寫道:已發(fā)送介紹電子郵件?,F(xiàn)在我還需要更多地清理數(shù)據(jù)。謝謝參觀。
1 回答

互換的青春
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
所以我想出了如何使用正則表達(dá)式來根據(jù)模式處理注釋。
下面的這個(gè)可以獲取所有不同的日期和所有狀態(tài),因?yàn)樗鼈兌加小案臓顟B(tài)”部分,并且我可以將各個(gè)組與舊狀態(tài)還是新狀態(tài)進(jìn)行匹配。
regex = r"(\d{1,2}\/\d{1,2}\/\d{4})\:\sChanged\sStatus\sfrom\s([A-Z][a-z]+(\s[a-z]+)?(\s[A-Z][a-z]+)?)\sto\s([A-Z][a-z]+(\s[a-z]+)?(\s[A-Z][a-z]+)?)"
如果我只關(guān)注“領(lǐng)養(yǎng)”,這個(gè)就可以獲取我需要的日期。
regex = r"(\d{1,2}\/\d{1,2}\/\d{4})\:\sChanged\sStatus\sfrom\s([A-Z][a-z]+(\s[a-z]+)?(\s[A-Z][a-z]+)?)\sto\sAdopted(?!\sElsewhere)
另外,我不需要使用 for 循環(huán)。在關(guān)注采用日期的特定情況下,我可以使用以下命令將采用日期添加到 Jupyter 筆記本中的數(shù)據(jù)框中。
df['Adopted']=df['Comments (inline)'].str.extract(r'(\d{1,2}\/\d{1,2}\/\d{4})\:\sChanged\sStatus\sfrom\s[A-Z][a-z]+(\s[a-z]+)?(\s[A-Z][a-z]+)?\sto\sAdopted(?!\sElsewhere)')
這也意味著我可以只使用原始 CSV 文件。
添加回答
舉報(bào)
0/150
提交
取消