web-dev-qa-db-ja.com

Pythonを使用して既存のExcelファイルに列を追加するにはどうすればよいですか?

これが私のコードです:

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

既存のExcelファイルには現在、「日付、ガンマ、シータ」という3つの列があります。ガンマ/シータの比率である「比率」と呼ばれる4番目の列を追加します。 Pythonを使用して既存のExcelドキュメントに別の列を追加するにはどうすればよいですか?このコードは、4つの要素が1つのセルに印刷されたExcelドキュメントを作成します

5
Sarah Porgess

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

あなたの更新された質問から私は私の答えを書き直しました。

あなたがしようとしていることを達成するために別のライブラリを使用する必要はありません。ここにあなたが望むものを達成するための別のオプションがあります。

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

結果を印刷するか、既存のファイルを編集するかは、コードから明確ではありません。 Excelファイルを編集している場合は、数式を作成してExcelに計算を任せることができます。

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