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