2017-12-18 188 views
-3

我有一个数据框,它有两列“Title”和“Description”。标题栏有一些与临床实验室测试相关的标题。不幸的是,大多数标题都是重复相同的测试,但由于标题中的细微变化,标题显示为唯一。用python中的新字符串或单词完全替换字符串

values = [('Complete blood picture', 'AB'), ('Complete BLOOD test', 'AB'), ('blood glucose', 'AB'), ('COMplete blood Profile', 'AB')] 
labels = ['title', 'description'] 
import pandas as pd 
labtest = pd.DataFrame.from_records(values, columns = labels) # Create data frame 
labtest = labtest.apply(lambda x: x.astype(str).str.lower()) # Convert columns to string and lower case 
labtest['title'].str.contains("blood") # Search for blood 

前:

Title      Description 
Complete blood test   AB 
COMPLETE Blood test\  AB 
Blood glucose    AB 
Complete blood picture  AB 

后:这是我怎么想的数据帧的样子]

Title      Description 
Blood test     AB 
Blood test     AB 
Blood test     AB 
Blood test     AB 

我想搜索单词“血液”在每个标题中,如果它是真的,那么用“血液测试”来改变整个标题。

P.S我是新来的python和使用文本数据,我只设法来搜索单词“血”。

+0

@furas,typo - > str.replace() –

+0

在你的例子中,“平均血糖(abg)”始终是整个字符串吗?或者在开始或结束时是否还有其他文字要保留? –

+0

你尝试过使用'str.replace()'吗?如果没有,那么先试试。 – furas

回答

1

这不是一个确切的解决方案,因为我不知道你的数据的格式,我只是给你以txt文件的例子,你可以帮助从这个代码:

如果file.txt的包含:

Title      Description 
Complete blood test   ABO group 
COMPLETE Blood test\  ABO group 
Blood glucose    ABO group 
Complete blood picture  ABO group 

代码:

track_dublicate={} 
with open('file.txt') as f: 

    for line_no,line in enumerate(f): 
     if line_no==0: 
      pass 
     else: 
      if tuple(line.split()[-2:]) not in track_dublicate: 
       track_dublicate[tuple(line.split()[-2:])]=line.split()[:-2] 
      else: 
       track_dublicate[tuple(line.split()[-2:])]='Blood test' 

print(track_dublicate) 
#you can save this data to a new file where you want. 

输出:

{('ABO', 'group'): 'Blood test'}