用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)