Я создаю python словарь с beautifulsoup
, преобразуя URL-адрес в xml
следующим образом:
from bs4 import BeautifulSoup
url = "http://api.brain-map.org/api/v2/data/query.xml?num_rows=10000&start_row=10001&&criteria=model::Gene,rma::criteria,products[abbreviation$eq%27Mouse%27]"
req = requests.get(url)
doc = req.text
root = etree.XML(doc)
soup = BeautifulSoup(doc)
final_dictionary1 = {}
for object in soup.find_all('object'):
final_dictionary1[object.find('id').string] = object.find('acronym').string
Тогда я получил bs4.element.NavigableString
. Там у меня есть несколько идентификаторов, которые имеют соответствующее имя, например:
'20174': 'Ruvbl2',
'71833': 'Dcaf7',
Теперь я хочу заменить столбец в моем фрейме данных df
, который содержит эти идентификаторы с соответствующим именем.
Я пытался:
df["GeneID"] = df["GeneID"].map(final_dictionary1)
##or
final_dictionary2=str.join(u'\n',map(str,final_dictionary1))
df["GeneID"] = df["GeneID"].map(final_dictionary2)
##df looks like:
df
Out[28]:
: Region GeneID DistanceValue
0 BG 79677107 0.0
1 BG 71920480 0.0
2 BG 77869780 0.0
3 BG 69838736 0.0
4 BG 100145371 0.0
... ... ... ...
Оба выдают ошибку:
AttributeError: Can only use .str accessor with string values!
Затем я проверил тип моего df ['GeneID'], который был dtype ('int64'), тогда я сделал
df['GeneID'] = df['GeneID'].astype(str)
#with output
df['GeneID'].dtypes
Out[31]: dtype('0')
Тем не менее я получаю ту же ошибку.