2016-03-31 177 views
2

我有一個df(Apple_farm),需要計算兩列(Good_applesTotal_apples)中找到的基於關閉值的百分比,然後將結果值添加到Apple_farm中的新列稱爲'Perc_Good'。從兩列中計算和創建百分比列

我曾嘗試:

Apple_farm['Perc_Good'] = (Apple_farm['Good_apples']/Apple_farm['Total_apples']) *100 

然而這會導致這個錯誤:

TypeError: unsupported operand type(s) for /: 'str' and 'str'

Print Apple_farm['Good_apples']Print Apple_farm['Total_apples']

產生具有但是數值除以他們的列表似乎導致他們成爲c倒轉到字符串?

我也試圖定義一個新的功能:

def percentage(amount, total): 
    percent = amount/total*100 
    return percent 

,但如何使用這個不確定。

任何幫助將不勝感激,因爲我是相當新的Python和熊貓!

回答

2

我想你需要轉換stringfloatint,因爲他們的typestring(不過貌似號):

Apple_farm['Good_apples'] = Apple_farm['Good_apples'].astype(float) 
Apple_farm['Total_apples'] = Apple_farm['Total_apples'].astype(float) 

Apple_farm['Good_apples'] = Apple_farm['Good_apples'].astype(int) 
Apple_farm['Total_apples'] = Apple_farm['Total_apples'].astype(int) 

樣品:

import pandas as pd 

Good_apples = ["10", "20", "3", "7", "9"] 
Total_apples = ["20", "80", "30", "70", "90"] 
d = {"Good_apples": Good_apples, "Total_apples": Total_apples} 
Apple_farm = pd.DataFrame(d) 
print Apple_farm 
    Good_apples Total_apples 
0   10   20 
1   20   80 
2   3   30 
3   7   70 
4   9   90 

print Apple_farm.dtypes 
Good_apples  object 
Total_apples object 
dtype: object 

print Apple_farm.at[0,'Good_apples'] 
10 

print type(Apple_farm.at[0,'Good_apples']) 
<type 'str'> 
Apple_farm['Good_apples'] = Apple_farm['Good_apples'].astype(int) 
Apple_farm['Total_apples'] = Apple_farm['Total_apples'].astype(int) 

print Apple_farm.dtypes 
Good_apples  int32 
Total_apples int32 
dtype: object 

print Apple_farm.at[0,'Good_apples'] 
10 

print type(Apple_farm.at[0,'Good_apples']) 
<type 'numpy.int32'> 
Apple_farm['Perc_Good'] = (Apple_farm['Good_apples']/Apple_farm['Total_apples']) *100 

print Apple_farm 
    Good_apples Total_apples Perc_Good 
0   10   20  50.0 
1   20   80  25.0 
2   3   30  10.0 
3   7   70  10.0 
4   9   90  10.0