从字符串tex中提取代码

2024-04-24 20:30:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个pandas数据库,它有一个包含数千个文档(每个索引行1个)的特性。在文档中,可以找到帐单代码。它们可以在文档中的任何位置找到(开始、结束、中间以及单个文档中的多个实例)。它们以字母开头,后跟最多6个字符(通常是数字,有时是另一个字母)。我已经编译了一个可能的代码列表(这是一个行业范围的代码集)。我的想法是使用类似于非索引词列表的代码列表。除非不排除代码,只保留代码。然后将它们附加到数据帧自己的列中,同时保持它们的索引与原始数据帧相同。由于行业规定,我不能发布样本数据。我不确定这是一个regex问题,我对Python中的任何解决方案都持开放态度(最好)。你知道吗

示例文档:

blah blah blah code1 blah blah code(n) blah

期望的数据帧结果:

1 |id# |Orignial Document |code1 code(n)|
2 |id#2|document 2        |code2 code(k)|
3 |id#3|document 3 blahs  |nan          |

代码列表:

[ code1, code2,..., code(n),...code(k)]

我取得了一些进展,我有以下代码

def match(input_string, icd_codes):
words = re.findall(r'\w+', input_string)
if [x for x in words if x in icd_codes]:
    return [x for x in words if x in icd_codes]
else: 
    return [np.NaN]

然后当你运行这个函数

y= str(df['Diagnosis'])
df['ICD']= pd.Series(data=match(y,icd_codes))
df['ICD']

It输出

Code
Code2
Code
Code(n)
.
.
.
NaN
NaN

最终,我认为代码需要这样总结:

df['ICD']=df.Diagnosis.apply(lambda f: match(f,icd_codes))

它只提取了大约25个代码(太少了,似乎都来自最后30个文档),而且它们的索引也不恰当。我很难弄清楚如何让它在文档的整个列上运行,并将输出连接到一个新列中(同时保持索引的完整性)。如果“诊断”中索引为1的文档在文本中没有代码,我希望出现一个NaN或空白。然后代码出现在索引相同的新列中。我能够通过使用将文档传递到列表中来提取更多的代码数据框箭头(). 但是,所描述的函数及其后续调用仍然忽略了保持原始索引完整性的必要性。我对这个问题很感兴趣。任何帮助都将不胜感激。你知道吗


Tags: 数据代码in文档iddf列表match