>  Q&A  >  본문

Python新手问题——大txt文件按条件将多行合并

数据格式如下:
······
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的每一小时的数据叠加起来成为新的一行(第二列的时间可以用时间戳表示或者以时间间隔表示),完全没有头绪,请大神指点指点

迷茫迷茫2741일 전650

모든 응답(8)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-18 10:36:26

    제가 직접 해결했습니다. 비록 복잡하더라도 요구 사항을 충족할 수 있습니다

    으아악

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:36:26

    시계열 기반인 경우 생성기를 사용하여 원본 파일을 읽고 새 줄을 생성한 후 출력하면 됩니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 10:36:26

    pandas는 사용자의 요구 사항을 해결하고 데이터를 데이터 프레임으로 읽어온 다음 처리할 수 있습니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 10:36:26

    이는 보유하고 있는 데이터 양에 따라 다릅니다

    1. 파일 핸들 순회를 사용하고 readlines()를 사용하지 마세요(메모리가 충분하지 않을 수 있음)

    2. 정보를 저장하려면 사전과 유사한 데이터 구조를 사용하세요. 메모리가 부족할 경우 중간 정보를 디스크 등에 기록하는 방법을 찾아야 합니다.

    대체적인 아이디어는 다음과 같습니다

    으아악

    회신하다
    0
  • PHPz

    PHPz2017-04-18 10:36:26

    당신이 하고 있는 일은 라벨과 시간이라는 두 가지 지표를 기반으로 통계를 그룹화하는 것입니다. 팬더를 사용하여 타임스탬프를 시간 열로 변환한 다음, 그룹별을 사용하여 라벨을 분류합니다. 동시에 시간을 요약해 보세요.

    회신하다
    0
  • 黄舟

    黄舟2017-04-18 10:36:26

    이 아이디어를 활용해 보세요
    https://www.zhihu.com/questio...

    회신하다
    0
  • 阿神

    阿神2017-04-18 10:36:26

    데이터 형식을 조금 분석해 보면 알 수 있을 것 같습니다
    1. 첫 번째 열은 날짜를 나타내며, 결과 배열의 첫 번째 수준인 result[date]의 키로 사용할 수 있습니다.
    2. 두 번째 열은 시간(분)의 타임스탬프여야 하므로 결과를 시간 단위로 표시하려면 각 결과[데이터] 항목에 대해 24개의 요소를 초기화하고 핵심은 시간(분)입니다. 해당 시간만큼 사용 가능) 스탬프의 값이 키로 사용되며, 키 값은 해당 시간 내 데이터의 합, 즉 resultdate
    3에 해당합니다. 간단합니다. 파일을 한 줄씩 처리하면 됩니다. 먼저 1107과 같은 첫 번째 열의 값을 읽고 결과[1107]를 연산합니다. 그런 다음 두 번째 열을 읽고 해당하는 hourtimestamp 키를 찾아서 추가하세요.
    4. 마지막으로 결과 배열을 순회하여 결과를 출력합니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:36:26

    필요한 것:

    으아악

    10줄 미만의 코드로 완료할 수 있습니다.

    회신하다
    0
  • 취소회신하다