>我有三列,如下所示:
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)