玩蛇网提供最新Python编程技术信息以及Python资源下载!
您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容

如何将大数据量的文本文件,按照条件完成多行合并的操作方法

数据格式如下:
······
1107 1385331000000 1.3142511607126754
1107 1385331000000 0.0021683196661660157
1107 1385331600000 0.0021683196661660157
1107 1385331600000 1.4867805985670923
1107 1385331600000 0.0021683196661660157
1107 1385332200000 1.1697626938303243
1107 1385332800000 0.0021683196661660157
1107 1385332800000 0.005813069022279304
1107 1385332800000 1.2847329440609827
1107 1385332800000 0.0021683196661660157
1107 1385333400000 1.2891586380834603
1108 1385247600000 0.026943168177151356
1108 1385247600000 6.184696475262653
1108 1385248200000 0.05946288920050806
1108 1385248200000 6.359572785335356
1108 1385248200000 0.010602880590260044
1108 1385248800000 0.026943168177151356
1108 1385248800000 5.568047923787272
1108 1385249400000 0 0.01024202685104009
1108 1385249400000 5.213017822855314
1108 1385250000000 0.01024202685104009
1108 1385250000000 5.385327254217893
1108 1385250600000 0.016259860511678353
1108 1385250600000 4.902644074658115
1108 1385251200000 4.141288808488436
1108 1385251800000 0.05388633635430271
1108 1385251800000 4.684096694966861
1108 1385251800000 0.01024202685104009
1108 1385252400000 4.386580113177049
1108 1385253000000 4.582219390797833
1108 1385253600000 5.211061096279831
1108 1385254200000 0.02048405370208018
1108 1385254200000 3.901546051563316
1108 1385254200000 0.01024202685104009
1108 1385254800000 4.0387888693118255
······
每一行数据间是tab键隔开的
第一列是标号,第二列是UTC格式时间戳,第三列是流量数据,每行的数据是10分钟内的,现在想把同一个标号的比如第一列为1107的每一小时的数据叠加起来成为新的一行(第二列的时间可以用时间戳表示或者以时间间隔表示),完全没有头绪,请大神指点指点

pandas可以解决你的需求,读取数据到dataframe中再进行处理

如果是按照时间序列的,直接使用generator来读取原文件,生成新的行然后输出就可以了.

你这个等于就是基于标号和小时两个指标分组统计,用pandas读入,用to_datetime将时间戳转化为时间列再取小时数,然后用groupby同时对标号和小时进行分类,sum汇总就行了。

请用这个思路
https://www.zhihu.com/questio...

这个要看你的数据量有多大了

大概的思路如下

from collections import Counter
c = Counter()
f = ['1107 1385332800000 1.2847329440609827',
'1107 1385332800000 0.0021683196661660157',
'1107 1385333400000 1.2891586380834603',
'1108 1385247600000 0.026943168177151356',
'1108 1385247600000 6.184696475262653',
'1108 1385248200000 0.05946288920050806' ]

'''
with open('xxoo.txt') as f:  # f 文件遍历句柄,相当于上面的 list f
    for i in f:
        s = i.split()
        c[s[0]] += s[2]
'''


for i in f:  # 这里是遍历 f, 这里遍历的是 list f, 你实际情况要用上面的 f
    s = i.split()  # 这里是空格分割,可以使用 print s 看看结果
    c[s[0]] += float(s[2])  # c 用来统计

for i in c:
    print i, c[i]

我觉得你这个数据格式可以稍加分析一下再做
1.第一列表示日期,你可以做为结果数组的第一层的键,result[date]
2.第二列看着应该是时间(分钟)的时间戳,这样你要求按小时来做结果,你就每个result[data]项初始化24个元素,键就是小时数(可以用相应的小时数的时间戳的值做键),键值对应的就是这个小时内的数据总和,即resultdate
3.初始化完成这个结果数组以后就简单了,你就遍历文件,逐行处理就可以了,每一行先读取第一列的值,比如1107,
就操作result[1107]。接着读取第二列,找到对应的hourtimestamp键,累加就行了。
4.最后遍历result数组,输出结果就行了。

玩蛇网文章,转载请注明出处和文章网址:http://www.iplaypy.com/wenda/wd13715.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年06月01日 - 17时10分53秒 发布自玩蛇网

我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules