Я пытаюсь использовать браузер генома ensembl api для получения геномной информации.Проблема в том, что каждый сетевой запрос может занять несколько секунд, поэтому я пытался использовать asyncio
для ожидания этих сетевых запросов при одновременной работе с имеющимися у меня данными.
Вот пример ввода данных DataFrameчто я использую:
import pandas as pd
df = pd.DataFrame({'Gene Name': {0: 'A1CF', 1: 'A1CF', 2: 'A1CF'},
'Sample Name': {0: 'ATL045', 1: 'QC2-20-T2', 2: 'GHE0624'},
'CDS Mutation': {0: 'c.234A>C', 1: 'c.492C>T', 2: 'c.490G>A'},
'AA Mutation': {0: 'p.K78N', 1: 'p.V164V', 2: 'p.V164I'}})
Цель состоит в том, чтобы использовать Gene Name
и CDS Mutation
информацию из приведенного выше df
, чтобы получить некоторую другую геномную информацию.
Этот первый методпредназначен для вызова метода ensembl_calls
, который отправит сетевой запрос и вернет проанализированный вывод.В идеале этот анализируемый вывод объединяется во что-то вроде главного кадра данных панд.
async def concurrent_location_info(df):
import pandas as pd
import asyncio
full_df = pd.DataFrame()
# iterate through DataFrame
dfs = [asyncio.ensure_future(ensembl_calls(row)) for index, row in df.iterrows()]
print(dfs)
В этом методе я пытаюсь выполнить сетевые запросы и проанализировать информацию, которую я получаю.
# this makes the network ensembl call asynchronously
async def ensembl_calls(row):
new_df = {}
try: # sometimes ensembl can't find what i'm looking for
# this can take a while
await info = Ensembl(row['Gene Name'], row['CDS Mutation']).info().split(',')
# parse the output
new_df['Gene'] = row['Gene Name']
new_df['Chrom'] = info[0]
new_df['Start'] = info[1]
new_df['End'] = info[2]
new_df['WT'] = info[3]
new_df['Var'] = info[4]
new_df['Sift_Index'] = info[5]
except:
pass
return new_df # ideally somehow gets added to a master pd dataframe
Я на правильном пути здесь?Есть ли способ заставить это работать?