2016-11-01 5 views
0

Ich versuche, Zellen in meinem Excel-Arbeitsblatt zu ersetzen, die Bindestrich "-" mit dem Durchschnittswert zwischen der oben liegenden Zelle und der darunter liegenden Zelle enthält. Ich werde versucht, dies in Spalte durch jede Zeile durch Looping zu tun 3Ersetzen Sie fehlende Werte in Excel Arbeitsblatt mit openpyx Modul

import math 
from openpyxl import load_workbook 
import openpyxl 

d_filename="Snow.xlsx" 
wb = load_workbook(d_filename) 

sheet_ranges=wb["PIT 1"]' 


def interpolatrion_of_empty_cell(): 

for i in range(7,31): 
    if i =="-": 
     sheet_ranges.cell(row = i, column = 3).value = mean(i-1,i+1) 
    else: 
     sheet_ranges.cell(row = i, column = 3).value 

wb.save(filename = d_filename) 

ist dies nur zu leicht zu machen oder ist es nicht möglich, mit openpyxl? zu überprüfen, ob seine gleich -

prost // Smiffo

+0

Also, was ist dein Problem? Sie haben einige Fehler? – Marcin

+0

ooh sorry .... habe den wichtigsten Teil vergessen. Ich bekomme keine Fehlermeldungen, aber die Zellen, die Bindestriche enthalten, werden nicht durch die Durchschnittswerte ersetzt. Sie bleiben als Bindestrich erhalten, nachdem die Datei gespeichert wurde. wenn das irgendeinen Sinn ergibt. – smiff

Antwort

2

Der Grund Werte ersetzt werden, ist, dass Sie i verwenden. Ich bin ein Index, nicht der Wert einer Zelle. Um den Mittelwert zu berechnen, verwenden Sie auch Indizes, nicht die Werte von oberen und unteren Zellen.

So könnte man dies in folgenden Weise lösen:

def interpolatrion_of_empty_cell(): 
    for i in range(7,31): 
      cell_value = sheet_ranges.cell(row=i, column=3).value 
      if cell_value == "-": 
       top_value = sheet_ranges.cell(row=i+1, column=3).value 
       bottom_value = sheet_ranges.cell(row=i - 1, column=3).value 
       sheet_ranges.cell(row=i, column=3).value = (float(top_value) + float(bottom_value))/2 

Nicht, dass diese Optimierungen erfordern kann, wie es für die Fälle accout nicht, wo tob und untere Reihen sind -, nicht Zahlen oder nur leere Zellen.

+0

Dies würde normalerweise das Problem beheben, aber was, wenn die oberen und/oder unteren Zellen auch "" enthalten? –

+0

@MosesKoledoye Also das ist die Feinabstimmung, über die ich geschrieben habe. Sie müssen nach den Werten suchen, wenn es sich um Zahlen handelt, wenn Sie nicht einige Standardwerte eingeben, z. B. 0. – Marcin

+0

Ich habe das nicht gelesen. Gute Eins +1 –

Verwandte Themen