如何计算列表/Series/DataFrame中仅正数的均值(排除负数、零、NaN)
仅计算正数均值的实现方法
下面针对普通数字列表、Pandas Series和DataFrame三种场景,分别给出具体实现:
1. 处理普通数字列表
先筛选出所有大于0且非NaN的元素,再计算均值(避免空列表除以0的错误):
import pandas as pd # 用于判断NaN,也可使用math.isnan,但需注意int类型不能直接用math.isnan nums = [1, -2, 0, 3.5, float('nan'), 5, -0.5] # 过滤出符合条件的正数 positive_nums = [x for x in nums if isinstance(x, (int, float)) and not pd.isna(x) and x > 0] # 计算均值,空列表时返回NaN mean_positive = sum(positive_nums) / len(positive_nums) if positive_nums else float('nan') print(mean_positive) # 输出: 3.1666666666666665
2. 处理Pandas Series
利用Pandas的布尔索引和内置均值方法,自动忽略NaN:
import pandas as pd s = pd.Series([1, -2, 0, 3.5, float('nan'), 5, -0.5]) # 筛选正数并计算均值 mean_positive = s[s > 0].mean() print(mean_positive) # 输出: 3.1666666666666665
3. 处理Pandas DataFrame
按列计算每列的正数均值
df = pd.DataFrame({ 'A': [1, -2, 0, float('nan'), 5], 'B': [-3, 4, 0, 6, float('nan')], 'C': [0, -1, 2, 3, -4] }) # 筛选各列正数后按列求均值 col_mean_positive = df[df > 0].mean() print(col_mean_positive) # 输出: # A 3.0 # B 5.0 # C 2.5 # dtype: float64
按行计算每行的正数均值
# 筛选各行正数后按行求均值 row_mean_positive = df[df > 0].mean(axis=1) print(row_mean_positive) # 输出: # 0 1.0 # 1 4.0 # 2 2.0 # 3 3.0 # 4 5.0 # dtype: float64
内容的提问来源于stack exchange,提问作者Hassan Al-Ahdal
相关产品推荐
相关产品推荐

