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

如何将pymssql读取的SQL Server数据转为分组字典列表

问题描述

我正在使用pymssql库,通过以下代码从SQL Server读取数据:

df = pd.read_sql_query(query, cnxn)

得到的DataFrame如下:

addr      port     device_id
==============================
XXX       1001      01
XXX       1001      02
XXX       1001      03
YYY       1001      04
YYY       1001      05

请问是否可以将该DataFrame转换为如下格式的字典列表:

[
    { 
        'addr': ['XXX', 'XXX', 'XXX'],
        'port': [1001, 1001, 1001],
        'device_id': ['01', '02', '03']
    },
    {
        'addr': ['YYY', 'YYY'],
        'port': [1001, 1001],
        'device_id': ['04', '05']
    }
]
解决方案

完全可以实现,借助Pandas的分组聚合功能就能达成需求,具体代码如下:

import pandas as pd

# 基于已读取的DataFrame进行处理
# 按addr和port分组,将每组的列值聚合为列表
grouped_df = df.groupby(['addr', 'port'], as_index=False).agg(list)
# 转换为目标字典列表格式
result = grouped_df.to_dict('records')

print(result)

关键逻辑说明:

  • groupby(['addr', 'port']):由于同一addr对应的port值一致,同时按这两列分组可确保每组数据的归属准确
  • agg(list):将每个分组内的所有列值合并为列表,比如同一addr下的多个device_id会被整合为一个列表
  • to_dict('records'):直接把处理后的DataFrame转换为字典列表,每个字典对应一组聚合后的数据

补充提示:

如果你的device_id在DataFrame中是数值类型,转换后列表里会是整数(比如1而非'01'),若需要保留字符串格式,可先执行以下代码转换列类型:

df['device_id'] = df['device_id'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:15:16