我是 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
我的问题是,如何让它在没有密钥错误的情况下运行?
如果您要查找的只是术语列表的循环,则如果您发布的代码当前有效,则以下代码应该有效。
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)
我无法尝试自己运行您的代码,因为您没有提供“
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
”的例子