Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I change this output array to make it compatible with my Pandas Graph?

I’m currently working on a Python project to grab data from a Microsoft SQL Server database and then turn it into a graph view using Pandas, however it does not seem to work because of the array I am getting from the database.

# 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)

Current Output:

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

Desired Output:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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

I’m trying to use this output for a pandas plot bar graph, and it currently doesn’t work with the Current Output I’ve shown above. I have tried to use result = cursor.fetchone() instead and then it does work, of course only with one result rather than the entire list of results I need in the graph.

The output of the result = cursor.fetchone() looks like this;

('proces1', )

Which is strange, because this output DOES work.

This right here is the code I use for the Pandas Graph:

# 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')

This is my current error code;

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

Does anyone know a good way to clean up this array or maybe have a better understanding of Pandas and how to get this graph to work? Thank you very much.

>Solution :

You can try:

# 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()

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading