Skip to content
Advertisement

Not able to read data to csv file using pandas

I have a below data in table need to read entire data in table to pandas after performing cumulative sum and average need to generate csv file [ comma separated file with headers ]

NAME,AGE,MARKS
A1,12,40
B1,13,54
C1,15,67
D1,11,41
E1,16,59
F1,10,60

I tried to write got stuck

import cx_Oracle
import pandas as pd

try : 
    sq='select * from emp'

    conn=cx_Oracle.cpnnect(myconnection)
    fd=pd.read_sql(sql,con=conn)
    fd['CUM_SUM'] = fd['MARKS'].cumsum()
    fd['AVG'] = fd['MARKS'].expanding().mean()
    fd.to_csv('file.csv', index=False)

except Exception as er:

    print(er)

Expected output in csv file with headers

NAME,AGE,MARKS,CUM_SUM,AVG
A1,12,40,40,40
B1,13,54,94,47
C1,15,67,161,53.66
D1,11,41,202,50.5
E1,16,59,261,43.5
F1,10,60,321,45.85

When i do print(fd) , it gives below output

NAME ..CUM,AVG
A1,..,40,40
B1,..,94,47
C1,..,161,53.66
D1,..,202,50.5
E1,..,261,43.5
F1,..,321,45.85

Advertisement

Answer

Seems like you are struggling to create csv file from table result

Where in your table as only 3 columns , so specify the column names in your query instead of '*'.

And the CUM and AVG you are getting it from the query result based on MARKS column dynamically using pandas functions and that you wanted in csv file , if that’s the requirement you are looking for then below code will work for you

If throws any error let me know

May be this code will work for you

# Importing modules 
import cx_Oracle
import pandas as pd

#Connection and Query taken into variable 
connec='Username/Password@Hostname:Port/Servicename'
yourQuery='select NAME,AGE,MARKS from emp'

try:
    
    your_connection=cx_Oracle.connect(connec)
    fpd=pd.read_sql(yourQuery,your_connection)
    
    #cumsum : calculate the sum of table marks 
    fpd['CUMULATIVE']=fpd['MARKS'].cumsum()
    
    #expanding().mean() : get you average 
    fpd['AVG']=fpd['MARKS'].expanding().mean()
    
    #Writing output to csv file 
    fpd.to_csv('/path/emp.csv',index=False)

except Exception as er:
    
    print(er)

Note : If their is no data in table the csv file will be created with only HEADER as a record

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement