2016-07-11 69 views
0

我有幾個分類列(描述)在我的DataFrame df_churn,我想轉換爲數值。當然,我想創建一個查找表,因爲我需要最終將它們轉換回來。迭代添加不同長度的列到DataFrame

問題是每列都有不同數量的類別,所以附加到df_categories並不容易,我不能想到任何簡單的方法。

這是我到目前爲止。由於長度不同,它會在第一列後停止。

cat_clmn = ['CLI_REGION','CLI_PROVINCE','CLI_ORIGIN','cli_origin2','cli_origin3', 'ONE_PRD_TYPE_1'] 

df_categories = pd.DataFrame() 

def categorizer(_clmn): 
    for clmn in cat_clmn: 
     dict_cat = {key: value for value, key in enumerate(df_churn[clmn].unique())} 

     df_categories[clmn] = dict_cat.values() 
     df_categories[clmn + '_key'] = dict_cat.keys() 

     df_churn[clmn + '_CAT'] = df_churn[clmn].map(dict_cat) 

categorizer(cat_clmn) 
+0

熊貓[categoricals](http://pandas.pydata.org/pandas-docs/stable/categorical.html)會自動爲你做這種事情。 –

回答

0

有一種臨時解決方案,但我相信它可以以更好的方式完成。

df_CLI_REGION = pd.DataFrame() 
df_CLI_PROVINCE = pd.DataFrame() 
df_CLI_ORIGIN = pd.DataFrame() 
df_cli_origin2 = pd.DataFrame() 
df_cli_origin3 = pd.DataFrame() 
df_ONE_PRD_TYPE_1 = pd.DataFrame() 

cat_clmn = ['CLI_REGION','CLI_PROVINCE','CLI_ORIGIN','cli_origin2','cli_origin3', 'ONE_PRD_TYPE_1'] 
df_lst = [df_CLI_REGION,df_CLI_PROVINCE,df_CLI_ORIGIN,df_cli_origin2,df_cli_origin3, df_ONE_PRD_TYPE_1] 


def categorizer(_clmn): 
    for clmn, df in zip(cat_clmn,df_lst): 
     d = {key: value for value, key in enumerate(df_churn[clmn].unique())} 
     df[clmn] = d.values() 
     df[clmn + '_key'] = d.keys() 

     df_churn[clmn + '_CAT'] = df_churn[clmn].map(d) 

categorizer(cat_clmn)