2016-12-04 3 views
0

В настоящее время я работаю над проектом, для которого мне нужно загрузить несколько тысяч цитат из PubMed. Я в настоящее время использую BioPython и написал этот код:BioPython Count Error

from Bio import Entrez 
from Bio import Medline 
from pandas import * 
from sys import argv 
import os 

Entrez.email = "my_email" 
df = read_csv("my_file_path") 
i=0 

for index, row in df.iterrows(): 
    print (row.id) 
    handle = Entrez.efetch(db="pubmed",rettype="medline",retmode="text", id=row.id) 
    records = Medline.parse(handle) 
    for record in records: 
     try: 
      abstract = str(record["AB"]) 
     except: 
      abstract = "none" 
     try: 
      title = str(record["TI"]) 
     except: 
      title = "none" 
     try: 
      mesh = str(record["MH"]) 
     except: 
      mesh = "none" 
    path = 'my_file_path' 
    filename= str(row.id) + '.txt' 
    filename = os.path.join(path, filename) 
    file = open(filename, "w") 
    output = "title: "+str(title) + "\n\n" + "abstract: "+str(abstract) + "\n\n" + "mesh: "+str(mesh) + "\n\n" 
    file.write(output) 
    file.close() 
    print (i) 
    i=i+1 

Однако, я получаю следующее сообщение об ошибке, когда этот код запуска:

Traceback (most recent call last): 
    File "my_file_path", line 13, in <module> 
    handle = Entrez.efetch(db="pubmed",rettype="medline",retmode="text", id=row.id) 
    File "/.../anaconda/lib/python3.5/site-packages/biopython-1.68-py3.5-macosx-10.6-x86_64.egg/Bio/Entrez/__init__.py", line 176, in efetch 
    if ids.count(",") >= 200: 
AttributeError: 'numpy.int64' object has no attribute 'count' 

Вот первые несколько столбцов файла CSV:

id 
10029645 
10073846 
10078088 
10080457 
10088066 
... 
+0

Пожалуйста, отредактируйте ваш вопрос и опубликуйте образец CSV, который вы конвертируете в DF - первые 5 строк должны быть в порядке. – MattDMo

ответ

1

Ваша ошибка в

handle = Entrez.efetch(db="pubmed",rettype="medline",retmode="text", id=row.id) 

Из документации

ид

список UID. Либо один UID, или разделенный запятыми список UIDs

From the examples I see, id является строка, а не numpy.int64 из панд dataframe. Вы должны преобразовать это row.id в строку