read_sql 在函数中的用法

read_sql usage in functions

我正在尝试在函数中使用 Pandas' read_sql() (来自 sqlalchemy),但它一直返回字符串而不是 DataFrame。

为什么会发生这种情况以及如何解决?

当我做这样的事情时:

table_name = pd.io.sql.read_sql(table_name, con=engine)

一切正常。但是当我把同样的东西放在这样的函数中时:

def sql_reading(table_name, comment):
     table_name = pd.io.sql.read_sql(table_name, con=engine)
     print('\x1b[1;31m'+comment  +'\x1b[0m')
     table_name.info()
     return table_name

它 returns 包含有关 DataFrame 的信息,但不允许我将结果用作 DataFrame:

sql_reading(some_table_from_a_query, "Some comment")

Prints some_table_from_a_query.info(), everything is fine.

但是当我尝试打印出它的头部或尾部,或者在下一步中直接使用 describe() 时,它 returns 出现错误:

some_table_from_a_query.info()

AttributeError: 'str' object has no attribute 'info'

更新:Return table_name 没有任何区别。

希望能解释为什么会发生以及如何解决。

您将字符串 'table_name' 与您也称为 'table_name' 的实际数据帧混淆了。这就是为什么您会收到字符串 (table_name) 没有属性 'info' 的错误。尝试为 table 与数据框使用不同的变量名称,例如:

def sql_reading(table_name, comment):
     df_table_name = pd.io.sql.read_sql(table_name, con=engine)
     print('\x1b[1;31m'+comment  +'\x1b[0m')
     df_table_name.info()
     return df_table_name