我有一个创建数据帧的函数。这是第一个功能。在第二个函数中,我想使用我在第一个函数中创建的数据帧。
这是缩短功能:
def einlesen():
rbu = pd.read_excel('INPUT\RBU_COIN2.xlsx') #RBU-DATEN AUS EXCEL EINLESEN
data_faktura = pd.merge(rbu, hvl, on='EQ_NR', how='left') #RBU UND HVL ANHAND DER EQ_NR ZUGEORDNET
print('RBU-DATEN UND HVL-DATEN ZUSAMMENGEFASST!')
data_faktura['TA'] = data_faktura['TA'].replace(['CORENET', 'MOBCORENET', 'mobRAN', 'mobCORENET', 'MOBRAN', 'RZ-Server', 'Sonstiges'], 'SONSTIGES') #TA NACH SUCHKRITERIEN ERSETZT
data_faktura['TA'] = data_faktura['TA'].replace(['RIFU', 'Rifu', 'rifu'], 'RIFU')
data_faktura['TA'] = data_faktura['TA'].replace(['TRANSPORTNETZ/WDM', 'Transportnetz/WDM', 'TRANSPORTNETZ/wdm', 'Transportnetz/wdm'], 'TRANSPORTNETZ/WDM')
data_faktura['TA'] = data_faktura['TA'].replace(['TVGrundv', 'tvgrundv', 'TVGrundV', 'TVgrundv'], 'TVGRUNDV')
data_faktura['TA'] = data_faktura['TA'].replace(['IP-CORE-VOICE'], 'IP-CORE')
data_faktura['TA'] = data_faktura['TA'].replace(['AGS0'], 'AGS')
data_faktura['TA'].fillna('SONSTIGES', inplace=True) #LEERWERTE ERSETZT
print('TECHNIKARTEN ZUGEWIESEN!')
#data_faktura.to_excel('fakt_daten.xlsx', index=False) #OUTPUT ALS EXCELDATEI
print('Daten für Berechnung des Zwischenergebnisses erfasst!')
Button_start1.config(state=ACTIVE) #BUTTON WIEDER AUF AKTIV GESETZT
msg_oben.config(text='Daten eingelesen! Bitte Berechnung starten!')
#os.startfile('fakt_daten.xlsx')
return data_faktura
你可以看到我试图用“return data_faktura”从函数返回数据帧,但它没有用。
我尝试像这样调用数据帧“data_faktura”:
def zwischenergebnis(data_faktura):
data_kl2m = data_faktura # EINLESEN VON TA '<2M' UND BILDUNG DER SUMME
data_kl2m = data_kl2m[data_kl2m.TA == '<2M']
以下是我得到的错误:
TypeError: zwischenergebnis() missing 1 required positional argument: 'data_faktura'
这就是我如何称呼这些功能:
Button_einlesen = ttk.Button(mainWin, text='Faktura einlesen!', command=einlesen)
Button_einlesen.grid(row=4, columnspan=6, sticky="ew")
Button_start1= ttk.Button(mainWin, text='Zwischenergebnisse berechnen!', state=DISABLED, command=zwischenergebnis)
Button_start1.grid(row=5, column=0, columnspan=3, sticky="ew")
我该如何解决?或者我在这里做错了什么?
感谢您的帮助!
@tzaman:
这是我得到的错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\nanops.py", line 93, in f
result = alt(values, axis=axis, skipna=skipna, **kwds)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\nanops.py", line 250, in nansum
the_sum = values.sum(axis, dtype=dtype_sum)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\numpy\core\_methods.py", line 32, in _sum
return umr_sum(a, axis, dtype, out, keepdims)
TypeError: unsupported operand type(s) for +: 'float' and 'str'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:\Users\A52113242\Desktop\PROJEKTE\[INPROGRESS] Faktura_sylvia\Faktool\geruest_tool.py", line 221, in zwischenergebnis
data_ags1_mw_KW = data_ags1_mw['KW_WERT'].sum()
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\generic.py", line 4255, in stat_func
skipna=skipna, numeric_only=numeric_only)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\series.py", line 2084, in _reduce
return op(delegate, skipna=skipna, **kwds)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\nanops.py", line 45, in _f
return f(*args, **kwargs)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\nanops.py", line 95, in f
result = alt(values, axis=axis, skipna=skipna, **kwds)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\pandas\core\nanops.py", line 250, in nansum
the_sum = values.sum(axis, dtype=dtype_sum)
File "C:\Users\A52113242\AppData\Local\Downloaded Apps\Winpython\python-3.4.3\lib\site-packages\numpy\core\_methods.py", line 32, in _sum
return umr_sum(a, axis, dtype, out, keepdims)
TypeError: unsupported operand type(s) for +: 'float' and 'str'
答案 0 :(得分:2)
您的按钮回调无法通过返回和传递参数直接进行通信,因为您实际上并未自己调用它们。
相反,你可以做一些事情,比如将它们添加到类中并使用实例变量。像这样:
class Commands():
def einlesen(self):
# ... all your code
self.df = data_faktura
def zwischenergebnis(self):
data_faktura = self.df
# proceed as before
然后你可以实例化一个Commands
对象并将它的方法绑定为你的按钮回调:
commander = Commands()
Button_einlesen = ttk.Button(mainWin, text='..', command=commander.einlesen)
Button_start1= ttk.Button(mainWin, text='..', command=commander.zwischenergebnis)