You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python项目中SQL数据无法完整导入Pandas DataFrame求助

问题分析与解决方案

核心问题

  1. SQL聚合列未指定别名:你的SUM(amount)没有设置别名,导致Pandas返回的DataFrame中这一列的列名是默认的SUM(amount),后续指定amount列名时无法匹配对应数据。
  2. 冗余的DataFrame二次包装+列顺序错误:pd.read_sql_query本身就会返回标准DataFrame,无需再用pd.DataFrame()重新构造。且你指定的列顺序['amount', 'category_in_out_id']和SQL查询返回的列顺序(category_in_out_id在前、聚合值在后)完全相反,直接导致数据错位。
  3. 变量未定义笔误:代码中df_trans_all用到的sql_query_trans_all变量未声明,属于明显的拼写/逻辑错误。

修正后的代码

# 获取按分类分组的交易数据,给聚合列添加别名
sql_query_trans_cat = pd.read_sql_query('''
                               SELECT
                               category_in_out_id,
                               SUM(amount) AS amount  -- 为聚合结果指定明确列名
                               FROM Transactions
                               GROUP BY category_in_out_id
                               ''', conn)

print(f"------------->> DEBUG Output of sql_query_trans_cat <<---------------------
{sql_query_trans_cat}")

# 注意:sql_query_trans_all需要补充对应的查询语句,否则会报错,暂注释
# df_trans_all = pd.DataFrame(sql_query_trans_all, columns = ['id', 'hash', 'valutadate', 'amount', 'transaction_text_id',
#                                         'account_id', 'asset_class_id', 'category_in_out_id', 'currency_id', 'int_or_ext_id', 'remarks'])

# 直接使用read_sql返回的DataFrame,按需调整列顺序
df_trans_cat = sql_query_trans_cat[['category_in_out_id', 'amount']]

print(f"------------->> DEBUG Output of df_trans_cat <<---------------------
{df_trans_cat}")
print(f"------------->> DEBUG Output of df_trans_cat Data Types <<---------------------
{df_trans_cat.dtypes}")

补充说明

  • pd.read_sql_query从数据库读取数据后,会直接封装为DataFrame,无需二次构造。
  • SQL查询中必须给聚合函数的结果指定别名,否则Pandas会用原始函数表达式作为列名,后续引用极易出错。
  • 若需调整DataFrame列顺序,直接通过df[['列名1', '列名2']]的方式选择即可,避免因列顺序不匹配导致的数据错位。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:25:25