Строка в pandas Dataframe на основе столбцов - PullRequest
0 голосов
/ 13 июля 2020

Я отправляю запрос ajax GET на сервер flask (http://localhost:5000/req/?q=139,2,10,60,5,1462,7,5,6,9,17,78), чтобы получить некоторые значения и назначить их фрейму данных. Делая это вручную, он отлично работает:

df = pd.DataFrame(data=[[139,2,10,60,5,1462,7,5,6,9,17,78]],columns=['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12'])

, но мне нужно, чтобы числа поступали из request.args через ajax, а затем основывались в Dataframe как массив.

@app.route('/req/', methods=['GET'])
def foo():
    args = dict(request.args.to_dict())
    t = request.args["q"]
    return getResults(t), 200

И getResults () будет выглядеть примерно так:

def getResults(name):
    df = pd.DataFrame(data=[[name]], columns=['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12'])
    """"

, но, конечно, это не работает. Выдает ошибку: ValueError: пройдено 12 столбцов, в переданных данных 1 столбец

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

1 Ответ

1 голос
/ 13 июля 2020

Аргументы разрешаются как строка, поэтому после t = request.args["q"], t будет "139,2,10,60,5,1462,7,5,6,9,17,78", вам понадобится список int

@app.route('/req') # GET only is default method
def foo():
    t = request.args["q"]
    t = [int(val) for val in t.split(",")]
    return getResults(t) # 200 is the default status code

и

def getResults(name):
    df = pd.DataFrame(data=[name], # no extra []

Также предпочитайте /req (что позволяет использовать как с завершающим sla, так и без него sh), а не /req/, который принимает только один, см. Подробности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...