web-dev-qa-db-fra.com

Comment ajouter une colonne à un fichier Excel existant à l'aide de python?

voici mon code:

import openpyxl, pprint
wb = openpyxl.load_workbook('/Users/sarahporgess/Desktop/SSA1.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')


data = {}
for row in range(1,sheet.max_row+1):


        date = sheet['A' +str(row)].value
        gamma = sheet['B' +str(row)].value
        theta = sheet['C' +str(row)].value
        ratio = float(gamma)/float(theta)
        resultFile = open('SSA2.csv' , 'w')
        resultFile.write( pprint.pformat(date))
        resultFile.write( pprint.pformat(gamma))
        resultFile.write( pprint.pformat(theta))

        resultFile.write( pprint.pformat(ratio))
        print(ratio)
        sheet['D1']=ratio
resultFile.close()
print('Done.')

mon fichier Excel existant comporte actuellement trois colonnes: "date, gamma, thêta". Je veux ajouter une quatrième colonne appelée "ratio" qui est le rapport gamma/thêta. Comment ajouter une autre colonne à un document Excel existant à l'aide de python? Ce code crée un document Excel avec les 4 éléments imprimés dans une cellule

5
Sarah Porgess

Il est plus facile d'utiliser le package Pandas

import pandas as pd
file_name = #Path to your file
df = pd.read_Excel(file_name) #Read Excel file as a DataFrame

df['Ratio'] = df['Gamma']/df['Theta']
#Display top 5 rows to check if everything looks good
df.head(5)

#To save it back as Excel
df.to_Excel("path to save") #Write DateFrame back as Excel file
3
Rakesh Adhikesavan

À partir de votre question mise à jour, j'ai réécrit ma réponse.

Vous n'avez pas besoin d'utiliser une autre bibliothèque pour accomplir ce que vous essayez de faire. Voici une autre option pour accomplir ce que vous voulez.

import openpyxl
import pprint

wb = openpyxl.load_workbook('/Users/sarahporgess/Desktop/SSA1.xlsx')
sheet = wb.active
# you may also use the wb.get_sheet_by_name('Sheet1') method here.


data = {}
for row in range(1,sheet.max_row+1):
        date = sheet.cell(row = row, column = 1) # use .cell() to get values of cells
        gamma = sheet.cell(row = row, column = 2)
        theta = sheet.cell(row = row, column = 3)
        print(date, gamma, theta)
        ratio = float(gamma)/float(theta)
        new_wb = openpyxl.Workbook() # creates new workbook to be saved as results
        # you can also open a wookbook here instead but I wrote it to create a results workbook as I didnt already have one.
        new_sheet = new_wb.active
        new_sheet['A1'] = pprint.pformat(date)
        new_sheet['B1'] = pprint.pformat(gamma)
        new_sheet['C1'] = pprint.pformat(theta)
        new_sheet['D1'] = pprint.pformat(ratio)
        print(ratio)
        # save new workbook as SSA2
        new_wb.save('/Users/sarahporgess/Desktop/SSA2.xlsx')

print('Done.')
2
Mike - SMT

Votre code ne précise pas si vous souhaitez imprimer le résultat ou modifier le fichier existant. Si vous modifiez un fichier Excel, vous souhaiterez peut-être créer une formule et laisser Excel faire le calcul pour vous.

import openpyxl
wb = openpyxl.load_workbook('/Users/sarahporgess/Desktop/SSA1.xlsx')
sheet = wb['Sheet1']

for row in sheet:
     date, gamma, theta = row
     ratio = theta.offset(column=1)
     ratio.value = "=B{0}/C{0}".format(theta.row) # if you want the formula
     # ratio.value = gamma/theta # if you just want the calculation

wb.save(…)
1
Charlie Clark