我如何改变这个输出数组,使它与我的Pandas图兼容?

xuo3flqw  于 2023-01-19  发布在  其他
关注(0)|答案(1)|浏览(108)

我目前正在进行一个Python项目,从Microsoft SQL Server数据库中获取数据,然后使用Pandas将其转换为图形视图,但是由于我从数据库中获取的数组,它似乎无法工作。

# Import Modules
import pandas as pd # Graph Module
import pyodbc # Microsoft SQL Server Module

# Connection string
conn_str = (
        "DRIVER={SQL Server Native Client 11.0};"
        "SERVER=server,port;"
        "DATABASE=db;"
        "UID=user;"
        "PWD=pass;"
)

conn  = pyodbc.connect(conn_str)
cursor = conn.cursor()
cursor.execute("SELECT DISTINCT processname AS 'Proces Naam' FROM table WHERE status = 'Aborted' ORDER BY processname ASC") 

result = cursor.fetchall()
print(result)

当前输出:

[('proces1', ), ('proces2', ), ('proces3', ), ('proces4', ), ('proces5', ), ('proces6', ), ('proces7', )]

所需输出:

['proces1','proces2','proces3','proces4','proces5','proces6','proces7']

我正尝试将此输出用于Pandas图条形图,但它目前无法与上面显示的Current Output配合使用。我曾尝试使用result = cursor.fetchone(),但它确实可以工作,当然,它只适用于一个结果,而不是图形中需要的所有结果。
result = cursor.fetchone()的输出如下所示;

('proces1', )

这很奇怪,因为这个输出确实有效。
这是我用来制作Pandas图的代码:

# Set Dataset
dataset={
        'PROCESS':[result],
        'ABORTS':[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] # just some random placeholder numbers. I know the result of the query is 17 rows of procesnames
}

# Create Graph
df = pd.DataFrame(data=dataset)
df.plot.bar(title="Aborts", x='PROCESS')

这是我当前的错误代码;

"name": "ValueError",
    "message": "arrays must all be same length",

有人知道清理这个数组的好方法吗,或者对Pandas有更好的理解,以及如何让这个图工作,非常感谢。

ct3nt3jp

ct3nt3jp1#

您可以尝试:

# Set Dataset
dataset={
        'PROCESS':[r[0] for r in result],
        'ABORTS': np.random.randint(1, 10, len(result))
}

# Create Graph
df = pd.DataFrame(data=dataset)
df.plot.bar(title="Aborts", x='PROCESS', rot=45)
plt.tight_layout()
plt.show()

相关问题