根据用户输入从连接的 JSON 字符串中渲染多个 Pandas 的数据帧

Posted

技术标签:

【中文标题】根据用户输入从连接的 JSON 字符串中渲染多个 Pandas 的数据帧【英文标题】:Rendering multiple Pandas' dataframes from concatenated JSON strings based upon user inpu 【发布时间】:2016-04-13 19:10:41 【问题描述】:

我正在尝试在基于由用户指定的值过滤的 pandas 数据框的 Jinja 模板构建的 Flask webapp 中显示图表。

在此特定页面的文件中,我有以下内容:

<form>
        <div id="radio">

                <input type="radio" id="radio1" name="Values"checked="checked" value="Value1"><label for="radio1">Value1</label>

                <input type="radio" id="radio2" name="Values" value="Value2"><label for="radio2">Value2</label>

                <input type="radio" id="radio3" name="Values"value="Value3"><label for="radio3">Value3</label>
                <a href='#' id="branch_input"><button type="button">Submit</button> </a>
        </div>
    </form>

对于用户将从中选择的单选按钮。 在我的基本模板中,我有以下内容,这是我认为我需要获得的价值:

 <script type="text/javascript">
          $(function) 
              $('a#valueinput_input').bind('click',function() 
                  $.getJSON('/_filterandreturndataframes',
                      Values: $('input[name="Values"]:checked').val(),
                  , function(data) 
                      <!--"confused"-->
                  
              

          

      </script>

然后我会将其传递给 Python 之类的东西

@app.route('_filterandreturndataframes')
def
    filtervalue = request.args.get('Values')
    #filtering and compiling dataframes here
    data = dataframe1.to_json() OR .to_html()?
    data2 = dataframe2.to_json() OR .to_html()?
    return data, data2

如果我理解正确的话,Python 可以从一个函数返回多个值。 JavaScript,如果我理解正确的话,只能返回一个。我希望用户单击一个按钮并在网页中输出两个图形。我已经想出了如何使用 .to_json() 从每个数据帧中获取 JSON 字符串,但不知道如何将它们组合成一个 JSON 字符串数组(或者即使这是解决此问题的正确方法),然后解析该数组进入相关字符串以输出到附加到特定段落 id 的表中。感谢您的建议!

【问题讨论】:

【参考方案1】:

使用to_json(),您最终会得到两种字符串类型。您可以创建自己的 JSON 字符串吗?

'[' + ','.join([data, data2]) + ']'

另一种笨拙的方法是只使用 python lists 和 dicts 作为中间数据结构,然后使用 json 模块将其序列化为 json,因为 python lists 和 dicts 与json 模块。

import json

l1 = dataframe1.to_dict(orient='records')
l2 = dataframe2.to_dict(orient='records')
D = 'data1' : l1, 'data2' : l2
jsonstr = json.dumps(D)

如果您不喜欢混合两个数据集,您也可以将两个数据帧连接起来,然后将一个巨大的数据帧作为 json 输出。

【讨论】:

谢谢!接下来的问题是:一旦数据框组合在网页中,我如何再次拆分它们,然后将它们传递给特定的 ID?还是神社变量?作为表格?

以上是关于根据用户输入从连接的 JSON 字符串中渲染多个 Pandas 的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

从输入URL到页面展示,这中间发生了什么?

Fabricjs - 在一个文档中渲染多个画布

如何根据列表中的数据在颤动中渲染多个小部件?

渲染 json 未显示在 rails 4 的视图中

ASP .NET CORE 根据环境变量支持多个 appsettings.json

根据对搜索字段的输入从 JSON 返回项目数据