djh*_*jhc 5 python string percentage dataframe pandas
我有一个df(Apple_farm),需要根据在两个列(Good_apples和Total_apples)中找到的值计算百分比,然后将结果值添加到Apple_farm中名为“ Perc_Good”的新列中。
我试过了:
Apple_farm['Perc_Good'] = (Apple_farm['Good_apples'] / Apple_farm['Total_apples']) *100
Run Code Online (Sandbox Code Playgroud)
但是,这导致此错误:
TypeError:/:'str'和'str'不支持的操作数类型
在做
Print Apple_farm['Good_apples'] 和 Print Apple_farm['Total_apples']
产生一个带有数值的列表,但是将它们相除似乎会导致它们转换为字符串?
我也试图定义一个新函数:
def percentage(amount, total):
percent = amount/total*100
return percent
Run Code Online (Sandbox Code Playgroud)
但不确定如何使用。
任何帮助将不胜感激,因为我是Python和pandas的新手!
我认为您需要将string列转换为float或int,因为它们type是string(但看起来像数字):
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)
Run Code Online (Sandbox Code Playgroud)
样品:
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'>
Run Code Online (Sandbox Code Playgroud)
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'>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)