【问题标题】:Query result won't display as pandas dataframe but can be displayed with print()?查询结果不会显示为 pandas 数据框,但可以用 print() 显示?
【发布时间】:2019-11-14 07:06:54
【问题描述】:

我想创建一个搜索框,它将从用户那里获取输入,将其放入 SQL 查询中,并从查询的数据库中返回匹配的记录。

一切似乎都很好 - 除了我无法将我的查询结果显示为 Pandas 数据框。该脚本只在它应该显示对象时执行。但是,当我使用 print() 时,会显示我的结果。

当我这样做时,什么也没有发生:

query = pd.read_sql(sql_string, connection)
query

但这很好用:

query = pd.read_sql(sql_string, connection)
print(query)

这是我的代码:

import qgrid
from ipywidgets import widgets
from IPython.display import display

connection = 'connection:details'
text = widgets.Text()
display(text)

def handle_submit(a):
    user_input = text.value
    sp_char = "%"
    sql_string = "SELECT a FROM my_database WHERE UPPER(a) LIKE UPPER('%s%s%s') % (sp_char,user_input,sp_char)
    query = pd.read_sql(sql_string, connection)
    query

text.on_submit(handle_submit)

我很确定我在 def 内部和外部移动变量的方式有问题,但我不确定从这里去哪里。

编辑:

用ipywidget函数解决display()

    query = pd.read_sql(sql_string, connection)
    display(qgrid.show_grid(query))

这就是我所需要的:)

【问题讨论】:

    标签: python pandas jupyter-notebook ipywidgets


    【解决方案1】:

    IPython 不打印函数内部的返回值。

    >>> a = 1
    >>> a            # prints 1 because in global scope
    
    >>> def foo():
            a = 2
            a        # prints nothing, even though a value is returned to the REPL
    >>> foo()
    
    >>> def baz():
            a = 2
            print(a) # prints 2
    >>> baz()
    

    您能否澄清“我的结果已显示”的意思?

    【讨论】:

    • “显示我的结果”是指:查询返回的数据以文本形式打印在单元格下方。脚本返回我想要的结果,但不是我想要的形式。
    • 那么为什么不在handle_submit 中打印(查询)呢?你真正想要什么形式?
    • 我的数据集包含长字符串值 - 只是打印它会弄得一团糟。我需要在同一个笔记本单元格中使用返回的数据 - 我想使用 qgrid 显示它。只放 qgrid.show_grid(query) 也无济于事。
    • 我想我有! python query = pd.read_sql(sql_string, connection) display(qgrid.show_grid(query))这就是我所需要的:)
    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    相关资源
    最近更新 更多