2016-10-05 2 views
0

내가 청소기 코드를 함께 사용을 위해 체인 수 있도록하고 싶습니다 다음과 같은 기능을 가지고 있습니다 :체인 연결 기능

def label_encoder(dataframe, column): 
    """ 
    Encodes categorical variables 
    """ 
    le = preprocessing.LabelEncoder() 
    le.fit(dataframe[column]) 
    dataframe[column] = le.transform(dataframe[column]) 
    return dataframe 

def remove_na_and_inf(dataframe): 
    """ 
    Removes rows containing NaNs, inf or -inf from dataframes 
    """ 
    dataframe.replace([np.inf, -np.inf], np.nan, inplace=True).dropna(how="all", inplace=True) 
    return dataframe 

def create_share_reate_vars(dataframe): 
    """ 
    Generate share rate to use as interaction var 
    """ 
    for interval in range(300, 3900, 300): 
     interval = str(interval) 
     dataframe[interval + '_share_rate'] = dataframe[interval + '_shares']/dataframe[interval + '_video_views'] 
    return dataframe 

def generate_logged_values(dataframe): 
    """ 
    Generate logged values for all features which can be logged 
    """ 
    columns = list(dataframe.columns) 

    for feature in columns: 
     try: 
      dataframe[str(feature + '_log')] = np.log(dataframe[feature]) 
     except AttributeError: 
      continue 
    return dataframe 

나는 같은 것을 할 싶습니다 :

new_df = reduce(lambda x, y: y(x), reversed([label_encoder, remove_na_and_inf, create_share_reate_vars, generate_logged_values]), df) 

하지만 첫 번째 함수는 두 개의 인수를 사용하므로 작동하지 않습니다. 이것에 대한 해결책, 아니면 완전히 다른 패러다임?

+0

label_encoder에서 어떻게 값을 가져 옵니까? – bravosierra99

+0

데이터 세트에 따라 미리 아는 것입니다. 나는 그것을 하드 코드 할 수있을 것 같아? – metersk

+0

예, 또는 적어도 기본값을 가지고 ... – bravosierra99

답변

3

functools.partial을 사용하여 부분적으로 label_encoder을 부분적으로 평가 한 다음 해당 버전을 사용하여 람다를 구문 분석 할 수 있습니다. 예 :

from functools import partial 
fixed_col_bound_encoder = partial(label_encoder, column=2) 
new_df = reduce(lambda x, y: y(x), reversed([fixed_col_bound_encoder, remove_na_and_inf, create_share_reate_vars, generate_logged_values]), df)