/ / Pandy Python stosują funkcje zdefiniowane w klasie - python, pandy

Pandy Pythona stosują funkcję zdefiniowaną w klasie - python, pandy

Obecnie używam Spyder IDE. Próbuję zastosować funkcję kompilacji własnej sfill do mojej ramki danych w oparciu o różne grupy. Za każdym razem, gdy tworzę tę funkcję, pojawia się następujący błąd:

TypeError: sfill () przyjmuje dokładnie 1 argument (2 podane)

Jestem pewien, że funkcja sfill () działa poprawnie po uruchomieniu samodzielnym. Co ja robię źle? Jak pozwolić Pythonowi wyświetlić ramkę danych chcieć bez użycia instrukcji globalna potrzeba w eksploratorze zmiennych? Jak skorzystać ze zwrotu w tej chwili?

Mój kod jest następujący:

import pandas as pd
have = pd.DataFrame({ 
"groups": pd.Series(["group1","group1","group1","group2","group2","group2"]) 
,"a0": pd.Series(["abc","1","something here","abc2","1","something here"]) 
,"a1": pd.Series(["","2","something here","","","something here"]) 
,"a2": pd.Series(["","3","something here","","3","something here"]) 
,"a3": pd.Series(["something","1","something here","something","1","something here"]) 
,"a4": pd.Series(["","2","something here","","2","something here"]) 
,"a5": pd.Series(["","","something here","","","something here"]) 
,"a6": pd.Series(["","","something here","","","something here"]) 
,"a7": pd.Series(["cdf","5","something here","mnop","5","something here"]) 
,"a8": pd.Series(["","6","something here","","6","something here"]) 
,"a9": pd.Series(["xyz","1","something here","xyz","1","something here"]) 
})

class main(object):
def sfill(vector):
vector = vector.copy()
vector.i0, vector.i1 = vector.index[0], vector.index[1]
vector.cond = have.loc[vector.i1].ne("")
vector.loc[vector.i0, vector.cond] = vector.loc[vector.i0, vector.cond].str.strip().replace("", None)
return vector

def Development_plan(selfdev):
global want
want=have.groupby("groups", group_keys=False, sort=False).apply(selfdev.sfill)



a=main()
a.Development_plan() # this is where the issue exists

Dzięki.

Odpowiedzi:

3 dla odpowiedzi № 1

funkcje w klasie powinny przejąć self jako pierwszy argument

def sfill(self, vector):
...

kiedy zadzwonisz selfdev.sfill(soemthing) to faktycznie dzwoni sfill(selfdev, something)

self jest tylko konwencją nazewnictwa, w Development_plan () używasz do tego selfdev.