【问题标题】:String to pandas Dataframe based on columns基于列的字符串到熊猫数据框
【发布时间】:2020-07-13 19:02:03
【问题描述】:

我正在向烧瓶服务器 (http://localhost:5000/req/?q=139,2,10,60,5,1462,7,5,6,9,17,78) 发送一个 ajax GET 请求,以便检索一些值并将它们分配给数据框。手动操作,效果很好:

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'])

但我需要通过 ajax 来自 request.args 的数字,然后作为数组基于 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 列

我该怎么做?我试过拆分字符串,尝试转换为数组..没有任何效果。

【问题讨论】:

  • 为什么是args = dict(request.args.to_dict())? request.args 已经是一个不错的字典

标签: python pandas numpy dataframe flask


【解决方案1】:

args被解析为字符串,所以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(允许带和不带斜杠)而不是只接受一个/req/refer to this for detail

【讨论】:

  • 太棒了,谢谢@azro,只是一个小修复,它是:int(val) for val(不是 van),对于其他任何人,在函数中它应该是:pd.DataFrame(data =[name]..... ps:我会在 4 分钟内接受 :) 再次感谢!
猜你喜欢
  • 2017-02-24
  • 2016-05-21
  • 2021-11-11
  • 2018-04-26
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
相关资源
最近更新 更多