用python计算数组的日平均值

用python计算数组的日平均值,python,arrays,Python,Arrays,我想计算一组值的每日平均值,而不考虑负值 我使用这个数据数组: Val=['45','25','45','26','-999','87','9','5','4','5','78','98','14','25', '34','15','15','14'...] 表示一个月(30天)的小时值 我试图从平均值中去掉负值,但没有成功 在python中,计算每日平均值并获得30个值的数组的最简单方法是什么 谢谢你的帮助 代码如下: f=打开('file.csv')) csv\u f=csv.r

我想计算一组值的每日平均值,而不考虑负值

我使用这个数据数组:

Val=['45','25','45','26','-999','87','9','5','4','5','78','98','14','25',
     '34','15','15','14'...]
表示一个月(30天)的小时值

我试图从平均值中去掉负值,但没有成功

在python中,计算每日平均值并获得30个值的数组的最简单方法是什么

谢谢你的帮助

代码如下:

f=打开('file.csv'))

csv\u f=csv.reader(f)

val=[]

对于csv\u f中的行:

   val.append(row[0])
对于范围(0,len(val[:])-24,24)内的i:

这里有一个选择:

假设您有6个值的数组,并且您对3个元素块(在您的案例中为24个元素块)的非负值的平均值感兴趣

[14]中的
:a=np.array([3,4,-999,5,-100,6],dtype=np.float)
在[15]中:a[a<0]=np.nan
在[16]中:np.nanmean(a.重塑(-1,3)),轴=1)
Out[16]:数组([3.5,5.5])

假设
Val
包含字符串,每天24个值(因此
len(Val)
是24的倍数):


尝试使用IF条件和int()进行列表理解。需要首先将原始值列表切成每天的块

import random

values = random.sample(range(-5, 100), 96)

def mean(l):
    # list comprehension with if condition to remove negatives and cast to int
    l = [int(numeric_string) for numeric_string in l if int(numeric_string) > 0]

    return sum(l) / len(l)

def chunk(l, n):
    # slice the values list into n sized chunks
    return [l[int(i):int(i) + n] for i in range(0, len(l), n)]

y = [ mean(day) for day in chunk(values, 24)]

print(y)

这样可以避免创建临时列表:

vals = ['45','25','45','26','-999','87','9',
        '5','4','5','78','98','14','25',
        '34','15','15','14']

daily_mean = (sum(int(v) for v in vals if int(v) > -1) /
              sum(1 for v in vals if int(v) > -1)

值是否存储为字符串?您是如何尝试的?谢谢,但是a.reforme(-1,3)),axis=1意味着什么?当我尝试它时,我得到了以下错误:np.nanmean(a.reformate(-1,24)),axis=1)ValueError:新数组的总大小必须为unchanged@user5276228,
a.重塑(-1,3)
表示您正在将
1D
数组重塑为
2D
数组
,包含3列,但行数不限
ValueError:新数组的总大小必须保持不变
意味着
数组中的元素总数不能被24整除。但是我在哪里提到我想要的是每日平均数(每个24个元素块)?
# turn the 1D input array into a 2D array, one line per day
DailyVals = [[int(h) for h in Val[i:i+24]]
             for i in range(len(Val)/24)]
# prune negative values
ValidVals = [[h for h in day if h >= 0]
             for day in DailyVals]
# compute the mean
Mean = [sum(val) / len(val) for val in ValidVals]
import random

values = random.sample(range(-5, 100), 96)

def mean(l):
    # list comprehension with if condition to remove negatives and cast to int
    l = [int(numeric_string) for numeric_string in l if int(numeric_string) > 0]

    return sum(l) / len(l)

def chunk(l, n):
    # slice the values list into n sized chunks
    return [l[int(i):int(i) + n] for i in range(0, len(l), n)]

y = [ mean(day) for day in chunk(values, 24)]

print(y)
vals = ['45','25','45','26','-999','87','9',
        '5','4','5','78','98','14','25',
        '34','15','15','14']

daily_mean = (sum(int(v) for v in vals if int(v) > -1) /
              sum(1 for v in vals if int(v) > -1)