在同一数据框中将一列除以另一列时出错

时间:2019-03-22 14:07:25

标签: python pandas

我有三列,如下所示:

Sales    Population     Income    Price
14       48777.0        285.0     nan
17       12550.0        1.0       nan     
24       15664.0        14.0      14
9        23796.0        24.0      0 
20       40149.0        63.0      nan
75       39489.0        32.0      nan

我需要将所有内容都转换为人均值,也就是说,对于销售中的每个元素,我需要将其除以相应的人口。例如,对于销售,我想按人口除以得到人均销售额:

Per capita sales 
14/48777
17/12550
...

我使用的命令是:

data['Per Capita Sales'] = data['Sales'] / data['Population']

但是我遇到了以下错误:

TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

有人知道如何解决此问题吗?我已经在线搜索了如何将一个列除以另一列元素,但是没有找到一种安全的方法...由于值“ nan”和“ 0”的列在分子中,因此我不知道为什么会有错误...

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

很可能,涉及的至少一列是 string 类型。 我建议不要将它们转换为仅用于除法,而是将其转换为 提前编号,用于所有其他操作:

data.Sales = pd.to_numeric(data.Sales)
data.Population = pd.to_numeric(data.Population)

如我所见,所有行都包含有效数据,因此上面(缩短的)形式应该足够了。

但是,如果您的数据“脏”(某些条目不能转换为数字), 您应该添加errors='coerce'参数。

然后您原来的除法命令应该起作用。

如果不确定DataFrame中的列类型,请执行:

data.info()

或者也许您从文件中加载DataFrame,例如打电话给read_csv? 在这种情况下,请包含dtype参数(格式为 {“ column name”:type} 的字典) 强制使用特定类型的特定列。

答案 1 :(得分:0)

您也可以尝试:

df['Per Capita Sales'] = df.astype('float').apply(lambda x: x['Sales']/x['Population'], axis =1)