如何避免Python for循环中的“关键错误”?

问题描述 投票:0回答:2

我是 python 新手,我正在尝试进行多次 PubMed 搜索并将结果数量保存在 CSV 文件中。除非我删除 for 循环,否则我现在拥有的代码将不会运行。我希望代码能够运行 CSV 文件中提供的“Terms”列,但我不知道将 for 循环放置在什么位置,而且我不知道如何...我想设置变量让循环运行。这是我产生关键错误的内容:

import requests
import time
import pandas as pd

def get_pubmed_results_count(search_terms, delay=1):
    base_url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi"
    results = {}

    for term in search_terms:
        # Define parameters for the API request
        params = {
            "db": "pubmed",
            "term": term,
            "retmode": "json"
        }

        try:
            # Make the request to the PubMed API
            response = requests.get(base_url, params=params)
            response.raise_for_status()

            # Parse the response
            data = response.json()
            count = data['esearchresult']['count']
            results[term] = count

        except requests.exceptions.RequestException as e:
            print(f"Error retrieving data for term '{term}': {e}")
            results[term] = None

        # Respectful delay between requests
        time.sleep(delay)

    return results

# Example usage

df_searchterms = pd.read_csv('search1.csv')
print(df_searchterms)

if __name__ == "__main__":
    for index, row in df_searchterms.iterrows():
        search_terms = (row['Term']) 
        result_counts = get_pubmed_results_count(search_terms)
    
    for term, count in result_counts.items():
       df_results = pd.DataFrame(result_counts.items(), columns=['term','count'])
       print (df_results)
       df_results.to_csv('TestRestults1.csv', index=False)

这是我的搜索词数据框的样子:

 Term
0   APOE AND Alzheimer's
1  PSEN1 AND Alzheimer's
2  PSEN2 AND Alzheimer's
3    APP AND Alzheimer's
4    CLU AND Alzheimer's

我的问题是,如何让它在没有密钥错误的情况下运行?

python loops keyerror
2个回答
0
投票

如果您要查找的只是术语列表的循环,则如果您发布的代码当前有效,则以下代码应该有效。

 if __name__ == "__main__":
     search_terms = ["APOE AND Alzheimer's", "foo and cancer", "lupus"]
     for s_term in search_terms:        
        result_counts = get_pubmed_results_count(s_term)

        for term, count in result_counts.items():
            df_results = pd.DataFrame(result_counts.items(), columns=['term', 'count'])
            print (df_results)
            df_results.to_csv(f'TestResult{s_term}.csv', index=False)

0
投票

我无法尝试自己运行您的代码,因为您没有提供“

search1.csv
”文件,但您可以添加一个计数器并运行整个列表

我注意到你的变量 search_terms 只是一个列表,里面有一个字符串......

如果您想要整个列的列表,您需要执行以下操作:

search_terms = df_searchterms[""APOE 和阿尔茨海默病]

如果这不起作用,请尝试:

for i in range(len(search_terms)):
    # Define parameters for the API request
    params = {
        "db": "pubmed",
        "term": search_terms[i],
        "retmode": "json"

或者给我们举个你的“

search1.csv
”的例子

© www.soinside.com 2019 - 2024. All rights reserved.