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



>我有三列,如下所示:

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"的列在分子中,我不知道为什么会出现错误......

非常感谢您的帮助!

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

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

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

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

然后你原来的划分命令应该可以工作了。

如果不确定数据帧中的列类型,请执行:

data.info()

或者,也许您从文件加载数据帧,例如调用read_csv?在这种情况下包括dtype参数(形式为 {"列名" : type}( 的字典(以强制特定列的所需类型。

您也可以尝试:

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

最新更新