首页 > 解决方案 > 有没有办法连接两列并将单行作为新列的键值对而不是整个列?

问题描述

我正在使用 pyodbc 和 pandas 从不同机器上的数据库中获取数据。我已经编写了用于获取 45 列的最终数据帧的 SQL,然后将其发送给上面的人进行验证。但因此数据框看起来很糟糕而且很混乱。

一些列,例如

 0, 'Windows Vista'
'error_info_id', 'error_info_description',
0, 'no error'
 'user_status_id', 'user_status_details',
1,'off'
 'volume_letter','volume_id','volume_cost','volume_date','volume_end_date'
'C','asd12edsdasd',100,'2019-09-09 16:45:46.007','2022-09-09 16:45:46.007

可以合二为一

operating system
{'Id': 0, 'name': 'Windows Vista'}
'error_info'
{'Id': 0, 'name':'no error'}
 'user_status'
{'Id': 1, 'name':'off'}
 'volume_letter','volume_id','volume_cost','volume_date','volume_end_date'
{'Id': 'asd12edsdasd', 'letter':'C','cost':100,'startdate':'2019-09-09 16:45:46.007','enddate':'2022-09-09 16:45:46.007'}

我已经 final_result = {**mvalue, **vvalue} 通过按照 SO 答案之一取这两列来尝试这个。但它将两列合并为一列。它做了类似的东西 error = {'0':'no error', '1':'error', '2': 'under obeservation'}

无法显示太多代码,但出于试用目的,可以尝试如下

import pandas as pd

d = {'id': [1, 2,3], 'system_name': ['abc','qrs','mln'], 'operating_system_id': [0,0,1], 'operating_system_name': ['Windows Vista', 'Windows Vista', Win&7'], 'error_info_id': [0,1,1], 'error_info_description':['no error', 'error', 'error'],'volume_letter': ['C','C','C'],'volume_id': ['12edsdasd', 'asd12edsd', 'asd12edasd'],'volume_cost':[100,100,100],'volume_date':['2019-09-09 16:45:46.007', '2019-09-09 16:45:46.007', '2019-09-09 16:45:46.007'],'volume_end_date':['2022-09-09 16:45:46.007','2022-09-09 16:45:46.007','2022-09-09 16:45:46.007']}

df = pd.DataFrame(data=d)

这些可以每行合并到一个类似的字典中吗?

标签: pythonpandaspyodbc

解决方案


必须阅读整个文档,但找到了初始解决方案

result['operating_system'] = result.apply(lambda row: {'id' : row.operating_system_id, 'name':row.operating_system_name}, axis=1)

现在每一行都有单独的行。


推荐阅读