pandas pd.DataFrame如何在忽略某些单元格中的“NA”字符串时计算mean()

kr98yfug  于 2023-02-20  发布在  其他
关注(0)|答案(3)|浏览(225)

我有一个 Dataframe ,我想计算A和B的列平均值,A和B中的一些行是字符串“NA”,而其他行是numpy.float64如何计算列A和B,同时忽略这些“NA”?我试图设置numeric_only=True,然后它只返回我列C和ID。我希望A和B的平均值是6.6和2.6
Dataframe ({“id”:(1,2,3,4,5,6),“名称”:(“苹果”、“苹果”、“甜瓜”、"甜瓜"、“橙子”、“橙子”),“A”:(1、2、“不适用”、20、5、5)、“B”:(1、5、4、2、“不适用”、1)、“C”:(一、五、四、二、三、一)})
| 身份证|姓名|A类|B|C级|
| - ------|- ------|- ------|- ------|- ------|
| 1个|苹果|1个|1个|1个|
| 第二章|苹果|第二章|五个|五个|
| 三个|瓜|“不适用”|四个|四个|
| 四个|瓜|二十个|第二章|第二章|
| 五个|橙子|五个|“不适用”|三个|
| 六个|橙子|五个|1个|1个|

au9on6nz

au9on6nz1#

试试这个:

import numpy as np

fruit.replace('NA', np.nan, inplace=True)
fruit['A'].mean()
5vf7fwbs

5vf7fwbs2#

由于mean可以跳过NaN值,因此可以使用to_numeric并设置errors="coerce"
错误{“忽略”、“引发”、“强制”},默认值为“引发”

  • 如果为“raise”,则无效解析将引发异常。
    *如果为coerce,则无效解析将设置为NaN。
  • 如果“ignore”,则无效分析将返回输入。
fruit[["A", "B"]].apply(pd.to_numeric, errors="coerce").mean()

输出:

A    6.6
B    2.6
dtype: float64
myzjeezk

myzjeezk3#

fruit['A'].replace('NA', 0).sum() / sum(fruit['A'].ne('NA'))
# 6.6

fruit['B'].replace('NA', 0).sum() / sum(fruit['B'].ne('NA'))
# 2.6

因此:

fruit[['A', 'B']].apply(lambda c:c.replace('NA', 0).sum() / sum(c.ne('NA')))
A    6.6
B    2.6
dtype: float64

相关问题