2017-12-21 15 views
1

첫 번째 질문 :'내 자신의 방법과 기능 Dataframe 클래스를

내가 판다 함께 일하고'DataFrames 내가 자주 데이터 사전 처리 및 기타의 일부와 같은 루틴을 실행하고 소지품. 이 두 가지 루틴 중 일부를 을 확장하는 ExtendedDataframe 클래스의 메소드로 작성하고 싶습니다. 나는 이것에 대해 어떻게 가야할지 모른다. 이 pandas.DataFrame로부터 상속 한 것 때문에 지금까지, 나는 나의 새로운 클래스의 모든 __init__을 쓰고 있지 않다 :

import pandas 
class ExtendedDataframe(pandas.DataFrame): 
    def some_method(self): 
    blahblah 

을이 분명히 상속에 의해 ExtendedDataframe의 인스턴스를 생성 나를 수 있습니다. 하지만 보통 pandas.read_csv과 같은 데이터를로드하는 경우 DataFrame을 반환합니다. 어떻게 이러한 csv 데이터를로드 할 수 있고 표준 DataFrame에 제공된 것의 위에 내 방법을 사용하기 위해 ExtendedDataframe으로 전환 할 수 있습니까? 로딩 단계에서 DataFrame 표준을 반환하면 ExtendedDataframe으로 변환하면됩니다.

두 번째 질문 :

없음 내가 사용하는 모든 팬더 '기능은 DataFrame 방법이 있습니다. 일부는 pandas.merge과 같이 DataFrames를 인수로 사용하는 함수입니다. 어떻게 이러한 함수의 사용을 내 ExtendedDataframe 클래스의 인스턴스로 확장 할 수 있습니까? otherwords에서, 만약 df1df2ExtendedDataframe의 두 인스턴스 내가 그냥 DataFrame의 표준 인스턴스 때와 같은

pandas.merge([df1, df2], ...) 

일을 어떻게,입니까?

답변

1

이 질문에 직접 대답하지는 않지만 문제에 대한 잠재적 인 대답입니다. 많은 사람들이 작업 과정에서 파이프 방법을 사용합니다. 대신 당신은 심지어 함수의 인수를 지정할 수 있습니다

df = df.pipe(foo) 

말할 수

df = foo(df) 

을 말하는

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pipe.html

! 전체 데이터 프레임 클래스를 캡슐화하는 것보다 유지 관리가 훨씬 쉽습니다. 그래서 아이디어는 함수의 라이브러리를 만들고 필요에 따라 파이프 할 수 있다는 것입니다.

+0

실제로 가능한 해결책입니다. 감사합니다! 그렇지 않으면 단순히 빌트인 클래스에 메소드/속성을 추가하는 좋은 일반적인 방법이 있습니까? – Ben

+0

당신이 실행할 문제는 내장 된 메소드를 호출하자마자 사용자 정의 된 DataFrame이 아닌 정상적인 DataFrame을 반환한다는 것입니다. –

+0

그래, 유일한 해결책은 빌트인 클래스 자체를 수정하는 것일 것입니다. (그렇게하고 싶지 않습니다.) – Ben

0

데이터 프레임의 인스턴스를 만들면 DataFrame 개체가됩니다. 이런 방식으로 기존 메서드를 재정의 할 수 있습니다. ____existingMethod____ 두 번째 질문에 대해서는 두 개의 데이터 프레임을 전달하는 새 클래스를 만드는 것이 좋습니다. 이 경우 ____init____ 방법을 만들어야합니다.