全世界的总预期寿命是多少?(与numpy一起)

2024-09-28 18:56:55 发布

您现在位置:Python中文网/ 问答频道 /正文

https://hub.jovian.ml/wp-content/uploads/2020/09/countries.csv

我使用上述数据练习熊猫和NumPy方法

我想用NumPy的平均函数来计算我的总体预期寿命

np.average(countries_df["life_expectancy"], weights=countries_df["population"])

但这给了我nan

如何使用NumPy获得正确答案

使用下面的方法,我得到了正确的答案

(countries_df['life_expectancy']*countries_df['population']).sum() / countries_df['population'].sum()

Tags: 方法答案httpsnumpydfcontentcountriesml
1条回答
网友
1楼 · 发布于 2024-09-28 18:56:55

在执行平均之前,需要删除空值:

aux_df = countries_df.dropna(subset=['life_expectancy','population'])
np.average(aux_df["life_expectancy"], weights=aux_df["population"])
>> 72.7416

您提到的第二种方法是不正确的,您需要先过滤“预期寿命”中的nan值,然后再进行除法中的人口总和:

(countries_df['life_expectancy']*countries_df['population']).sum() / countries_df[~countries_df['life_expectancy'].isna()]['population'].sum()
>> 72.7416

编辑

样本数据:

+        -+      +              -+
| Life Expectancy | Population | Life Expetancy * Population |
+        -+      +              -+
| 70              |        500 | 35000                       |
| 71              |       1000 | 71000                       |
| nan             |       2000 | nan                         |
+        -+      +              -+
Sum:                      3500   106000

使用第二种方法:106000/3500=30.28(显然不正确)

如果在执行计算之前删除nan行,则得到下表

+        -+      +              -+
| Life Expectancy | Population | Life Expetancy * Population |
+        -+      +              -+
|              70 |        500 | 35000                       |
|              71 |       1000 | 71000                       |
+        -+      +              -+
Sum:                      1500   106000           

结果:106000/1500=70.66

如果你把一个数乘以nan,你会得到一个nan。当您对所有值求和时,只需忽略nan值并对其余值求和,而不像numpy.sum,如果存在nan,它也将返回nan

相关问题 更多 >