2014-10-03 3 views
0

나는 이런 식으로, 거기에 몇 가지 "데이터 블록"텍스트 파일이 있습니다Python - 텍스트 파일을 반복하는 가장 좋은 방법은 무엇입니까?

log20140109 
value1 3.056 
value2 1.045 
value3 0.064 
log20140209 
value1 1.036 
value2 4.565 
value3 3.344 
log20140209 
value1 0.432 
value2 5.834 
value3 3.030 
and so on... 

아이디어는 텍스트 파일에서 데이터를 읽고 x 축 값이로 시작하는 문자열은 그래프를 그릴 것입니다 log-prefix와 그 float들은 y 축에있다. 각 값은 해당 그래프의 선이어야합니다.

도표를 그리기위한 값을 읽는 가장 좋은 방법은 무엇입니까? 나는리스트와 사전에 관한 기본적인 것들을 알고 있었지만, 나는이 경우에 어떻게 적용 하는지를 발견하지 못했다. 사용할 수있는 다른 데이터 객체가 있습니까?

+1

난 정말 당신이 무엇을 요구하지 않는 한 당신이 있습니다. x 축과 값이'log'로 시작하고 예제 데이터에서'log' 행은 동일합니다. 그래서 나는 왜 그들이 같은'x'를 가리키는 지 3으로 3으로 묶인 이유를 정말로 보지 못합니다. 입력 및/또는 출력의 더 좋은 예를 제공하고 그 값을 그룹화하는 방법을 제공하십시오. – Bakuriu

+0

어쨌든 이러한 것들의 대부분은 ['itertools.groupby'] (https://docs.python.org/3.4/library/itertools.html#itertools.groupby)와 적당한' 키 '기능. – Bakuriu

+0

죄송합니다. 내 마지막 문자열은 log20140309 여야합니다. 즉. 각 데이터 블록에는 유니크 "이름"이 있습니다. – cmdP

답변

3

더 유연한 무언가로하지 않고, 당신이 가진 팬더 Dataframe에 데이터를 얻을 수 있습니다 :

import pandas as pd 
with open('bla.txt') as f: 
    x = f.read() 
all_lines = x.split('\n') 
log_names = all_lines[0::4] 
value1 = [float(x.split(' ')[1]) for x in all_lines[1::4]] 
value2 = [float(x.split(' ')[1]) for x in all_lines[2::4]] 
value3 = [float(x.split(' ')[1]) for x in all_lines[3::4]] 
df = pd.DataFrame([value1, value2, value3], columns=['value1', 'value2', 'value3'], index =log_names) 

다음 정확히 당신이 플롯 싶어하지만 팬더가 그것을 처리 할 수 ​​있어야하는 방법.

df.plot() 

는 시작

enter image description here

+0

고맙습니다! 예제 그래프는 내가 찾고있는 것입니다. 나는 그 판다 DataFrame을 파헤쳐 보겠다. :) – cmdP

관련 문제