ValueError: Несоответствие длины: ожидаемая ось имеет 2 элемента, новые значения имеют 1 элемент - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать графический интерфейс для моего кода здесь.Он в основном получает местоположение папки от пользователя, которая содержит кучу файлов Excel.Затем он извлекает и компилирует данные из всех этих файлов в нужный мне формат и записывает их в выходной файл Excel.

Код сам по себе работал, пока я не решил использовать Tkinter для графического интерфейса в надежде изучитькак использовать Tkinter в процессе.

Я пытался определить класс со всеми различными функциями, которые обрабатывают мои данные.

Но похоже, что ни одна из функций не может вызывать друг другани переменные, и я продолжаю получать странные ошибки, подобные приведенной ниже.

import pandas as pd
import os
from tkinter import *
import tkinter.messagebox
import tkinter.filedialog

class specomp:
def __init__(self,master):
    frame=Frame(master)
    frame.pack()

    self.printButton=Button(frame,text="Select folder",command=self.set_thisdir)
    self.printButton.pack(side=LEFT)

    self.quitButton=Button(frame,text="Quit",command=master.destroy)
    self.quitButton.pack(side=LEFT)

    self.exButton=Button(frame,text="Execute",command=self.myprog)
    self.exButton.pack(side=LEFT)

def set_thisdir(self):
    global thisdir
    thisdir= filedialog.askdirectory(initialdir=os.getcwd(),title='Please select the folder where you saved Spectrometer excel files')


def fsheet_DCOP(j,k,l):
    #from the input frame j it returns the column that matches DCOP name in list k in column 5 and parameter name l in column 7
    ret=pd.DataFrame([])
    for i in k:
        ret=ret.append(j[j[5] == i])
    ret=ret[ret[7]==l]
    return ret

def fsheet_Table(j,k):
    #transforms the raw output of above function into final table for every file, with same column name etc.
    j=j.transpose()
    j=j[5:]
    j.columns=[k]
    j=j.transpose()
    ret=wfrpair.append(j)
    ret=ret.iloc[:,5:30]
    ret = ret.transpose()
    return ret

def fin_col_ren(j,k):
    #after all files input has been appended, this function renames all the columns, and adds the Inline parameter name to the data column
    j.columns=['MEMS Lot ID','MEMS Wfr ID','MEMBRANE Lot ID','MEMBRANE Wfr ID','TSV Lot ID','TSV Wfr ID',k]
    return j

def myprog(self):
    os.chdir(thisdir)
    print("You have following files in the target folder:\n")
    msg="You have following files in the target folder:\n"

    for i in os.listdir(os.chdir(thisdir)):
        print (i,'\n')
        msg=msg+"\n"+i
    msg=msg+"\n"
    tkinter.messagebox.showinfo("Spectrometer File Compiler", msg)


    input("Press Enter to continue...")    
    writer = pd.ExcelWriter(r'C:\Users\spoikayi\f_output.xlsx')
    spedf = pd.DataFrame([])
    pairingdf2=pd.DataFrame([])

    M32FinCDsheet=pd.DataFrame([])
    M32DICDsheet=pd.DataFrame([])
    TSVFinCDsheet=pd.DataFrame([])
    for i in os.listdir(os.chdir(thisdir)):
        fullsheet = pd.read_excel(i, sheet_name='Sheet1')
        fsheet = pd.read_excel(i, sheet_name='Sheet1',header=None)
        fsheet=fsheet.drop([0,1,2,3,4,5],axis=0)
        fsheet=fsheet.drop(columns=[0,1,2,8,9,10,11,12,13,14,15,16,42,43])
        wfrpair=fsheet.iloc[0:6]
        pairing=fullsheet.iloc[5:11,17:39]
        spe=fullsheet.iloc[[5,6,7,8,9,10,11,14,15,16,17,18,19,20],[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39]]
        pairing=pairing.transpose()
        spe=spe.transpose()
        spedf=spedf.append(spe)
        pairingdf2=pairingdf2.append(pairing)


        df1y632=fsheet_DCOP(fsheet,['1Y632'],'Moyenne tr CD Finale-Item')
        dfTSV=fsheet_DCOP(fsheet,['1L417','1V417'],'Moyenne tr CD Finale-Item')
        M32data=fsheet_Table(df1y632,'M32_Fin_CD')
        TSVCDdata=fsheet_Table(dfTSV,'TSV_CD')
        M32FinCDsheet=M32FinCDsheet.append(M32data)
        TSVFinCDsheet=TSVFinCDsheet.append(TSVCDdata)



    spedf=spedf.drop(columns=[11,20])
    spedf.columns=['MEMS Lot ID','MEMS Wfr ID','MEMBRANE Lot ID','MEMBRANE Wfr ID','TSV Lot ID','TSV Wfr ID','VERTICAL GAP HEIGHT (M34)','MEMBRANE THICKNESS','SI GAP WIDTH (M32 FIN)','MEMBRANE TO ELECTRODE GAP','TOP CAVITY DEPTH (M94)','CONTACT ANGLE OF FOTS COATING']
    pairingdf2.columns=['MEMS Lot ID','MEMS Wfr ID','MEMBRANE Lot ID','MEMBRANE Wfr ID','TSV Lot ID','TSV Wfr ID']

    M32FinCDsheet=fin_col_ren(M32FinCDsheet,'M32 Fin CD 1Y632')
    TSVFinCDsheet=fin_col_ren(TSVFinCDsheet,'TSV Fin CD')

    pairingdf2.to_excel(writer,sheet_name='Pairing')
    spedf.to_excel(writer,sheet_name='SPE')
    M32FinCDsheet.to_excel(writer,sheet_name='M32 Fin CD 1Y632')
    TSVFinCDsheet.to_excel(writer,sheet_name='TSV Fin CD')

    writer.save()
    tkinter.messagebox.showinfo("Spectrometer File Compiler", "Compilation Complete! \nPlease Check output file.")
    return

root= tkinter.Tk()
b=specomp(root)
root.mainloop()

Сначала у меня были ошибки, такие как thisdir не был определен, поэтому я сделал его глобальной переменной.

Этоошибка, которую я получаю сейчас:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\spoikayi\Documents\Portables\Anaconda\anaconda3\lib\tkinter\__init__.py", line 1702, in __call__
    return self.func(*args)
  File "C:/Users/spoikayi/.spyder-py3/Spectrometer_Compiler_GUI.py", line 100, in myprog
    M32data=fsheet_Table(df1y632,'M32_Fin_CD')
  File "C:/Users/spoikayi/.spyder-py3/Spectrometer_Compiler_GUI.py", line 45, in fsheet_Table
    j.columns=[k]
  File "C:\Users\spoikayi\Documents\Portables\Anaconda\anaconda3\lib\site-packages\pandas\core\generic.py", line 4389, in __setattr__
    return object.__setattr__(self, name, value)
  File "pandas\_libs\properties.pyx", line 69, in pandas._libs.properties.AxisProperty.__set__
  File "C:\Users\spoikayi\Documents\Portables\Anaconda\anaconda3\lib\site-packages\pandas\core\generic.py", line 646, in _set_axis
    self._data.set_axis(axis, labels)
  File "C:\Users\spoikayi\Documents\Portables\Anaconda\anaconda3\lib\site-packages\pandas\core\internals.py", line 3323, in set_axis
    'values have {new} elements'.format(old=old_len, new=new_len))
ValueError: Length mismatch: Expected axis has 2 elements, new values have 1 elements
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...