如何将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
相关产品推荐
相关产品推荐

