使用pandas按行计算多列均值时排除特定值与非计算列的方法
修改后可直接运行的代码
import pandas as pd # 读取H1~H24列,读入时直接将-9999识别为缺失值,去掉原代码错误的skiprows参数避免跳过头 df = pd.read_csv(file, sep='\t', usecols=[*range(1,25)], na_values=-9999) # 将0值也替换为缺失值,不参与均值计算 df = df.replace(0, pd.NA) # 按行计算均值,自动跳过所有缺失值 df_mean = df.mean(axis=1) # 索引对齐id编号(从1开始) df_mean.index = df_mean.index + 1 # 输出结果到文件 df_mean.to_csv(outfile, sep='\t', header=False)
核心修改逻辑
- 读入数据时新增
na_values=-9999参数,直接把无效值-9999识别为pandas内置的缺失值,不需要额外遍历处理 - 新增
df.replace(0, pd.NA)语句,把另一类无效值0也替换为缺失值 - pandas的
mean方法默认开启skipna=True,会自动跳过所有缺失值计算均值,最终得到的就是仅统计有效值的日均值
可选优化
如果某一行24个值全为无效值,计算结果会为NaN,你可以根据需求新增空值处理逻辑,比如要将空结果替换为-9999,可以在计算均值后加一行:
df_mean = df_mean.fillna(-9999)
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

