2017-04-05 48 views
2

我參加了在Kaggle的泰坦尼克號教程,以瞭解大熊貓/機器學習。功能來計算每個值在熊貓列中的百分比

這裏是我的內核:https://www.kaggle.com/trenzalore888/titanic/titanic-learning

我想創建一個函數,它有兩個參數,數據幀和列名。我想要這個函數來計算每個類的百分比(假設它是二進制的,即0或1)。

我可以做到這一點硬編碼即專門爲泰坦尼克號設置,但我想創建一個功能,所以我可以在將來使用它。

這裏是我的失敗嘗試:

traintotal=(len(train.index)) 
testtotal=(len(test.index)) 

def Is_data_imbalanced (df,objectivecolumn) : 
    objectivecount= df.objectivecolumn[df.objectivecolumn > 0].sum() 
    objectivecountpercentage=(objectivecount/traintotal)*100 
    objectivecountrounded= np.ceil(objectivecountpercentage) 
    return objectivecountrounded 

Is_data_imbalanced(train,"Survived") 

不幸的是,我得到一個屬性錯誤:

AttributeError: 'DataFrame' object has no attribute 'objectivecolumn'

下面是硬編碼版本的作品:

traintotal=(len(train.index)) 
print("there are", traintotal,"rows in the train data") 

testtotal=(len(test.index)) 
print("there are {} rows in the test data".format(testtotal)) 

Survialcount= train.Survived[train.Survived > 0].sum() 
Survialcountpercentage=(Survialcount/traintotal)*100 
print(Survialcountpercentage) 

survivalcountrounded= np.ceil(Survialcountpercentage) 

print(" ",survivalcountrounded,"percent survived") 

有誰知道我可以得到這個工作?好像火車罰款需要df,但.Survived的第二個參數columnname不起作用。

+2

嘗試'objectivecount = DF [objectivecolumn] [DF [objectivecolumn]> 0]。SUM()',它需要顯式類型,以以「。」訪問。符號。屬性訪問通常是脆弱的,嘗試使用.loc或[]。 – umutto

+1

謝謝你的幫助!它現在很好用。將嘗試使用[]而不是使用[]的習慣。 – trenzalore888

回答

0

假設它確實是二進制的,那麼所有你需要的是

def Is_data_imbalanced(df, objectivecolumn): 
    return int(df[objectivecolumn].mean() * 100) 
+0

謝謝你的幫助!現在效果很好 – trenzalore888

+0

會不會,謝謝! – trenzalore888