Python сворачивает список «pandas.core.series.Series» в фрейм данных из вызова map

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

Я новичок в python и надеюсь, что кто-нибудь сможет помочь мне разобраться с map . У меня есть функция myfunc , которая принимает столбец в фрейме данных и для каждого столбца создает вычисление, результатом которого является JSON, который я затем преобразую в фрейм данных. Ниже приведен псевдокод для того, что я делаю.

Например

 def myfunc (factor):
    
    # This is the API we are posting to
    str_url = "www.foourl.com"

    # This is the factor we post to try and get the result
    request_string = [{"foo":factor}]
          
    header = {"content-type": "application/json","AUTH-TOKEN": "Foo"}
    # We post it using our authorization and Token
    response = requests.post(str_url , data=json.dumps(request_string), headers=header)
    
    # convert response to json format and then to the dataframe
    results_json = response.json()
    return(pd.json_normalize(results_json))

  

Затем я выполняю свою функцию, используя приведенный ниже код, который работает отлично. Я могу получить доступ к каждому результату, используя result[1], чтобы получить результаты фрейма данных для factor[1], results [2] для factor [2] и так далее. Он возвращает <класс’pandas.core.series.Серия’>

 # Import in the excel sheet and get the factors
df = pd.read_excel ('ref_data/search_factors.xlsx')
test = df['factor_number']

# Run the API for every factor
# Collapse the list then into a dataframe
result = test.map(myfunc)

  

Мой вопрос

Поскольку все результаты являются фреймами данных и имеют точно такую же структуру (5 столбцов с одинаковым именем), есть ли способ, которым я могу просто свернуть все в один фрейм данных после всех итераций с map

Я знаю, например, в R вы можете использовать bind_rows в dplyr или что-то подобное map_df , чтобы сделать то же самое. Является ли их эквивалентом в python?

Ответ №1:

Да, в pandas у нас есть concat

 df=pd.concat(result.tolist())