Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图在范围内收集不一致的数据_Python_Data Manipulation - Fatal编程技术网

Python 试图在范围内收集不一致的数据

Python 试图在范围内收集不一致的数据,python,data-manipulation,Python,Data Manipulation,我正在使用python。我试图将一组数据划分为1000个元素范围,并找到平均值,包括不以0.0表示的站点 下面是数据示例 X 2699528 0.000786782 X 2699555 0.493415 X 2699559 0.000786782 X 2699625 0.0748873 X 2699645 0.0712507 X 2699664 0.000786782 X 2699676 0.400653 X 2699683 0.0109586 X 2699711 0.000786782 X 2

我正在使用python。我试图将一组数据划分为1000个元素范围,并找到平均值,包括不以0.0表示的站点

下面是数据示例

X 2699528 0.000786782
X 2699555 0.493415
X 2699559 0.000786782
X 2699625 0.0748873
X 2699645 0.0712507
X 2699664 0.000786782
X 2699676 0.400653
X 2699683 0.0109586
X 2699711 0.000786782
X 2699739 0.00157294
X 2699060.0617229
X 2699919 0.000786782
X 2699934 0.000786782
X 2699968 0.498501
X 2700027 0.499971
X 2700040 0.000786782
X 2700089 0.0101799
X 2700147 0.000786782
X 2700157 0.0719793
X 2700185 0.00314341
X 2700189 0.000786782

我希望数据看起来像:

X 2700000 average1
X 2701000 average2
....
问题是在每个范围内没有一个一致的数字。某些范围内可能有零个元素。此外,我不想简单的一个平均值,但一个平均值的网站,不包括太多。基本上,如果我有

X 1 10
X 3 10
X 5 10
X 7 10
X 9 10
我不想返回10作为平均值,而是5(五个0和五个10)

下面是我的代码

import sys

sum = 0.0
startin = 2700000

for i in range(2700, 155000):
        m = (i * 1000) + 1000
        i = i * 1000
        for line in sys.stdin:
                data =line.strip().split('\t')
                if data[0] == "CHROM":
                        continue
                if int(data[1]) >= i and int(data[1]) <= m:
                        sum += float(data[2])
        print i, (sum/1000)
        continue

谢谢您的帮助。

您可以使用整数除法在一次迭代中将所有值分配给存储桶,而不是针对每个可能的范围对整个数据集进行迭代

buckets = defaultdict(float)
bucket_size = 1000

for line in lines:
    index,value = line.split()
    buckets[int(index)/bucket_size] += float(value)

for k,v in sorted(buckets.items()):
    print k,v/bucket_size

所以有什么问题吗?这不是快速测试法,但似乎你得到了你想要的。所有的平均值都不同,但它只打印了第一项的平均值。
buckets = defaultdict(float)
bucket_size = 1000

for line in lines:
    index,value = line.split()
    buckets[int(index)/bucket_size] += float(value)

for k,v in sorted(buckets.items()):
    print k,v/bucket_size