避免类中使用空变量:筛选非None的pd.Series并统计有效数量
问题与解决方案
首先看你定义的数据类:
@dataclass class MyClass: df1: pd.Series = None df2: pd.Series = None df3: pd.Series = None df4: pd.Series = None df5: pd.Series = None @property def series_mean(self) -> pd.Series: series_mean = ( self.df1 + self.df2 + self.df3 + self.df4 + self.df5 ).mean() return series_mean
解决思路与实现
1. 筛选非None的Series
把所有df属性收集到列表中,过滤掉None值,只保留有效的pd.Series对象,避免无效值参与运算报错。
2. 统计有效属性数量并手动计算均值
通过有效Series列表的长度获取有效属性数量,求和后除以该数量,替代.mean()方法,实现按有效属性个数计算均值的需求。
修改后的完整代码
from dataclasses import dataclass import pandas as pd @dataclass class MyClass: df1: pd.Series = None df2: pd.Series = None df3: pd.Series = None df4: pd.Series = None df5: pd.Series = None @property def series_mean(self) -> pd.Series: # 收集所有非None的有效Series valid_series = [s for s in [self.df1, self.df2, self.df3, self.df4, self.df5] if s is not None] # 处理无有效Series的边界场景,可根据需求调整返回值 if not valid_series: return pd.Series([pd.NA]) # 求和后除以有效属性数量 total_sum = sum(valid_series) valid_count = len(valid_series) return total_sum / valid_count
补充说明
- 列表推导式的写法简洁高效,避免了逐个判断属性是否为
None的冗余代码。 - 增加了边界处理逻辑,当没有任何有效Series时返回含
pd.NA的Series,你也可以根据业务需求改成抛出异常或返回空Series。 - 手动计算均值的方式更贴合你的需求:有效属性有N个就除以N,和
.mean()按元素维度计算均值的逻辑完全不同,更符合场景要求。
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

