我创建了一个pandas数据库,其中包含数千个文档(每个索引行1个)。在文档中,可以找到帐单代码。这些可以在文档中的任何位置找到(开头,结尾,中间和单个文档中的多个实例)。它们以字母开头,后跟最多6个字符(通常是数字,有时是另一个字母)。我已经编制了可能的代码列表(这些是行业范围的编码集)。我的想法是使用类似于停用词列表的代码列表。除了不包括代码,只留下代码。然后将它们附加到数据框的自己的列中,同时将它们保持索引与原始数据帧相同。由于行业监管,我无法发布样本数据。我不肯定这是一个正则表达式问题,而且我对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']
输出
Code
Code2
Code
Code(n)
.
.
.
NaN
NaN
最终,我认为代码需要包含这样的内容:
df['ICD']=df.Diagnosis.apply(lambda f: match(f,icd_codes))
它只提取了大约25个代码(方式太少而且似乎都来自最近30个文档)并且它们也被不恰当地编入索引。我无法弄清楚如何让它在整个文档列上运行并在新列中连接输出(同时保持索引的完整性)。我想要发生的是如果文档在"诊断"中编入索引1,则会出现NaN或空白。文本中没有代码。然后代码出现在新列索引相同。通过使用df.iterrows()将文档传递到列表中,我能够提取更多代码。但是,所描述的功能及其随后的调用仍然忽略了保留原始索引的完整性的需要。我非常坚持这个问题。任何帮助将不胜感激。