У меня возникают некоторые странные проблемы. У меня есть сценарий, который получает JSON-файл, содержащий некоторую информацию, которую я получаю, имена генов более конкретно. У меня была идея просто работать с ним как с строкой, которая отлично работала до тех пор, пока я не дошел до того момента, когда я хотел отфильтровать полученный список генов с другим списком генов (т.е. меня интересуют только гены в JSON файл [файл A], которые находятся в другом списке генов [файл B]). Это мой сценарий:Pandas: слияние двух серий
import urllib
import pandas as pd
pathway = ['hsa04630', 'JAK-STAT']
# Read JSON pathway data from KEGG via TogoWS REST service
link = 'http://togows.dbcls.jp/entry/pathway/' + pathway[0] + '/genes.json'
file = urllib.request.urlopen(link)
data = pd.DataFrame(file.readlines())
# Remove first and last two lines (does not contain data)
data = data.drop(data.index[[0, 1, -2, -1]])
def get_genes(string):
""" Takes a JSON string and finds the gene ID """
gene = str(string[0]).split(':')[1].split(';')[0].replace('"', '')
return gene
# Filter for gene ID
data = pd.DataFrame(data.apply(get_genes, axis=1), columns=['Gene']).sort(
'Gene')
# Filter for EGFR Core gene list
filter = pd.DataFrame(pd.read_excel('../../Gene lists/Gene lists.xlsx',
sheetname='EGFR Core')['Gene'])
filtered = filter.merge(data, on='Gene')
print(filtered)
Я использовал merge
таким образом раньше, так что я был очень удивлен, когда filtered
dataframe возвращается как пустой. Я вручную проверил, что в двух разных файлах есть общие гены, поэтому это не должно быть проблемой. Мне интересно, причина в том, что он не работает, потому что я делаю что-то странное в функции gen_genes
, то есть работает со строками.
Вот заполнитель для другого списка генов [файл B], который содержит некоторые из генов, которые я проверил вручную, в случае, если вы хотите запустить мой скрипт. Я заменил исходный [файл B] на этот список, и я получаю тот же результат.
filter = pd.DataFrame(['BRAF','KRAS','EGF','EGFR'], columns=['Gene'])
Помочь ли кому-нибудь?
Это всегда так просто ... Спасибо большое, что сделал это! – Sajber