2017-01-06 2 views
0

현재 Spyder IDE를 사용하고 있습니다. 다른 그룹을 기반으로 자체 데이터 함수에 sfill을 적용하려고합니다. 나는 확신Python pandas 적용 클래스에 정의 된 함수

TypeError: sfill() takes exactly 1 argument (2 given)

기능 sfill() 올바르게 작동, 독립을 실행할 때 :이 기능을 만들 때마다, 나는 다음과 같은 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떻게 파이썬 변수 탐색기에서 문 글로벌 희망를 사용하지 않고 원하는 dataframe를 표시 할 수 있습니까? 이 순간에 어떻게 수익을 사용합니까?

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 

감사를 다음과 같이

내 코드입니다. 당신이 selfdev.sfill(soemthing)를 호출 할 때 클래스의

+0

SAS 토지에서오고 있습니까? 전역 변수'want'를 선언하고 싶지는 않을 것입니다. 그것을 클래스 변수로 만들거나'Development_plan'에서 결과를 반환하는 것으로보세요 –

+0

hahahaha! 당신 말이 맞아요. 나는 SAS 땅에서 왔습니다. 아직도 파이썬 컨벤션에 익숙해 지려고 노력합니다. SAS에 100 % 지루함. 나는 반환을 사용하고 일하게했다. 감사. – Seb

답변

3

기능이에 대한 selfdev 사용) (

selfsfill(selfdev, something)이 Development_plan에, 단지 명명 규칙입니다 실제로 호출 첫 번째 인수

def sfill(self, vector): 
    ... 

self를 취해야한다 .

+2

그리고 약간의 추가. @Seb은'sfill'을'@ staticmethod'로 장식 할 수도 있습니다. –

+0

@staticmethod는 멋지게 작동합니다. – Seb

관련 문제