Список фреймов данных добавляет [] или фрейм данных считывает заголовок при прохождении цикла for. Как я могу заставить список работать в цикле for?

Я использую импорт из потока данных Alteryx, который представляет собой один столбец, содержащий следующий целочисленный формат:

Список фреймов данных добавляет [] или фрейм данных считывает заголовок при прохождении цикла for. Как я могу заставить список работать в цикле for?

Чтение данных из alteryx автоматически преобразует их в фрейм данных.

searches = Alteryx.read("dataimport")

SUCCESS: reading input data "dataimport"
      RxNorm_Id
0            99
1           161
2           167
3           168
4           197
...         ...
6711    2562541
6712    2565823
6713    2566308
6714    2566416
6715    2571104

У меня есть цикл for, который просматривает URL-адреса и заменяет сегмент поиском.

for search in searches:
    print(f"Scraping {search}")
    url = f"https://rxnav.nlm.nih.gov/REST/rxcui/{search}/historystatus.json?caller=RxNav"
    print(url)

Когда я пытаюсь запустить данные через цикл, он сначала начинается с имени заголовка.

Скрапинг RxNorm_Id https://rxnav.nlm.nih.gov/REST/rxcui/**RxNorm_Id**/historystatus.json?caller=RxNav

Я не совсем уверен, почему сначала используется заголовок, но, очевидно, это вызывает ошибку, потому что поиск не существует.

Если я попытаюсь изменить фрейм данных на список, он заключает каждый элемент в квадратную скобку. Такие как:

Info: Python (2): [[99], [161], [167], [168], [197], [272], [281], [376]]


searches = searches.values.tolist()

Scraping [99]
https://rxnav.nlm.nih.gov/REST/rxcui/[99]/historystatus.json?caller=RxNav

Если я жестко запрограммирую поиск как [99,161,167,168,197,272,281,376], мой цикл работает без проблем.

Как я могу получить исходный фрейм данных в этом формате? Или как я могу заставить функцию tolist не заключать каждое число в квадратные скобки.

Я понимаю, что мой источник данных защищен, и использование Alteryx не позволяет мне реплицировать источник данных. Но этой информации должно быть достаточно для решения проблемы.

Ниже приведен весь мой код, обрезанный для легкого воспроизведения:

    from ayx import Alteryx
    from numpy import dtype
    import pandas as pd
    import requests
    
    searches = Alteryx.read("dataimport")
#    searches = searches.values.tolist()
    
    
#    for search in searches: attempt for the tolist() function
    for search in [searches]:
        print(f"Scraping {search}")
        url = f"https://rxnav.nlm.nih.gov/REST/rxcui/{search}/historystatus.json?caller=RxNav"

        print(url)
        data = s.get(url,headers=headers).json()      #results from second redirect
        print(data)
        a = data['rxcuiStatusHistory']['definitionalFeatures']
        b = data['rxcuiStatusHistory']['attributes']
        print(b)
        rxcui = b['rxcui']
        name = b['name']
        print(rxcui)
        print(name)
    
        try: 
            baserxcui = a['ingredientAndStrength'][0]['baseRxcui']
            basename = a['ingredientAndStrength'][0]['baseName']
            print(baserxcui)
            print(basename)
        except KeyError:
            baserxcui = rxcui
            basename = name
            print(baserxcui)
            print(basename)
    
        try:  
            bossrxcui = a['ingredientAndStrength'][0]['bossRxcui']
            bossname = a['ingredientAndStrength'][0]['bossName']
            print(bossrxcui)
            print(bossname)
        except KeyError:
            bossrxcui = rxcui
            bossname = name
            print(bossrxcui)
            print(bossname)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто взять первый элемент внутри поиска, поскольку поиск представляет собой список. Итак, ваш код становится примерно таким:

for search in searches:
    print(f"Scraping {search[0]}")
    url = f"https://rxnav.nlm.nih.gov/REST/rxcui/{search[0]}/historystatus.json?caller=RxNav"
    print(url)

Или вы можете просто просто изменить

searches = searches.values.tolist()

к

searches = [i[0] for i in searches.values.tolist()]

Это должно работать, но это не так, потому что формат списка недействителен для URL-адреса при использовании функции tolist().

user1470034 16.03.2022 21:54

Я сделал несколько ошибок в своем первом ответе. Пожалуйста, проверьте снова.

Emmanuel 16.03.2022 21:56

Спасибо, Эммануэль, второе решение сработало. Изменение индекса на 1 в первом решении помогло, но мне также пришлось выполнить поиск в [поиск].. в любом случае, вы меня туда привели, и я ценю это.

user1470034 16.03.2022 22:04

Другие вопросы по теме