从参数化的SQL调用中填充新的数据框列

时间:2019-10-09 11:57:45

标签: python pandas

我有一个数据框,其单列tbl_name包含SQLite数据库中的表列表:

tables = pd.read_sql_query("SELECT tbl_name FROM sqlite_master WHERE type = 'table'", db)

我想添加一列,其中包含数据库中每个表的行数。我希望它能起作用:

tables['count'] = tables.apply(lambda row : pd.read_sql_query(f"SELECT COUNT(*) FROM {row['tbl_name'}", db).iloc[0,0])

这将引发关键错误。这条线应该是什么样的?

即使是陌生人,要诊断这个问题,我也尝试只使用一张表中的行数:

pd.read_sql_query(f'SELECT COUNT(*) FROM help_infotip', db).iloc[0,0]
>> 3

但是

tables['count'] = tables.apply(lambda row : pd.read_sql_query(f'SELECT COUNT(*) FROM help_infotip', db).iloc[0,0])

只显示一列NaN值,而不是3s!

我显然犯了一些根本性的错误,但是我看不到什么。

1 个答案:

答案 0 :(得分:1)

尝试一下:

tables['count'] = tables.tbl_name.apply(lambda row : pd.read_sql_query(f"SELECT COUNT(*) FROM {row}", db).iloc[0,0])

在您的版本中,缺少axis=1,如下所示:

tables['count'] = tables.apply(lambda row : pd.read_sql_query(f"SELECT COUNT(*) FROM {row['tbl_name']}", db).iloc[0,0], axis=1)