2016-12-04 3 views
0

Ich arbeite derzeit an einem Projekt, für das ich ein paar tausend Zitate aus PubMed herunterladen muss. Ich bin derzeit biopython und diesen Code geschrieben haben:BioPython Count Fehler

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 

Allerdings habe ich die folgende Fehlermeldung, wenn dieser Code ausgeführt wird:

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' 

Hier sind die ersten paar Spalten der CSV-Datei:

id 
10029645 
10073846 
10078088 
10080457 
10088066 
... 
+0

Bitte bearbeiten Sie Ihre Frage und veröffentlichen Sie ein Beispiel der CSV, die Sie in eine DF konvertieren - die ersten 5 Zeilen oder so sollte in Ordnung sein. – MattDMo

Antwort

1

Ihr Fehler ist bei

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

Aus der Dokumentation

id

UID-Liste. Entweder eine einzelne UID oder eine kommagetrennte Liste von UIDs

From the examples I see ist id ein String ist, kein numpy.int64 aus einem pandas Datenrahmen. Sie sollten das konvertieren row.id in eine Zeichenfolge

Verwandte Themen