2017-04-27 4 views
1

여기 내 팬더 ​​Dataframe 참조 인덱스 모호한 시간 :파이썬 팬더

     press222 
datetime      
2017-03-31 14:02:04 110.854683 
2017-03-31 14:02:04 110.855759 
2017-03-31 14:02:04 110.855103 
2017-03-31 14:02:04 110.853790 
2017-03-31 14:02:05 110.854034 
2017-03-31 14:02:05 110.855103 
2017-03-31 14:02:05 110.854683 
2017-03-31 14:02:05 110.855698 
2017-03-31 14:02:05 110.853851 
2017-03-31 14:02:06 110.854385 
2017-03-31 14:02:06 110.853905 
2017-03-31 14:02:06 110.854988 
2017-03-31 14:02:06 110.854988 
2017-03-31 14:02:06 110.854988 

당신은 내가 초당 여러 값을 가지고 있음을 알 수 있지만, 불행하게도 타임 스탬프는 전체 초에 (로거 (밀리 초)을 뱉어하지 않았다) , 그것은 어떻게 든 모호하게 만든다. "동일 초"에 속하는 값의 평균을 구할 수있는 방법이 있습니까? 예를 들어, 14:02:04, 05는 하나, 06은 하나의 평균값입니까?

df.rolling('S').mean() 

을 그리고 다른 값하지만 여전히 같은 시간을 얻을 :

나는 롤링이 같은 의미 시도 (실제 dataframe는 ... 수동으로 할 너무 오래 물론이다) 열 (= 색인). 해당 avg 값으로 초당 하나의 행을 유지하고 싶습니다. 도움을 주셔서 감사합니다. - 감사합니다!

답변

1

당신은 인덱스에 groupby을 할 수 있었던 전화 mean :

In [285]: 
df.groupby(level=0).mean() 

Out[285]: 
        press222  
datetime       
2017-03-31 14:02:04  110.854834 
2017-03-31 14:02:05  110.854674 
2017-03-31 14:02:06  110.854651 

그래서 읽기에이 작업을 수행하려면 하나의 날짜 항목

에 모든 중복 값 붕괴, 당신은 덩어리에 위의 내용을 읽고 할 수있는 그러나 중복 항목이 청크에 걸쳐 있다면 위와 같은 작업을 수행해야합니다. 첫 번째 읽기 df를 압축합니다.

In [291]:  
import io 
import pandas as pd 
t="""datetime,press222  
2017-03-31 14:02:04,110.854683 
2017-03-31 14:02:04,110.855759 
2017-03-31 14:02:04,110.855103 
2017-03-31 14:02:04,110.853790 
2017-03-31 14:02:05,110.854034 
2017-03-31 14:02:05,110.855103 
2017-03-31 14:02:05,110.854683 
2017-03-31 14:02:05,110.855698 
2017-03-31 14:02:05,110.853851 
2017-03-31 14:02:06,110.854385 
2017-03-31 14:02:06,110.853905 
2017-03-31 14:02:06,110.854988 
2017-03-31 14:02:06,110.854988 
2017-03-31 14:02:06,110.854988""" 
chunks=[] 
for chunk in pd.read_csv(io.StringIO(t), parse_dates=[0], index_col=[0], chunksize=3): 
    chunks.append(chunk.groupby(level=0).mean()) 
final_df = pd.concat(chunks) 
final_df 

Out[291]: 
        press222  
datetime       
2017-03-31 14:02:04  110.855182 
2017-03-31 14:02:04  110.853790 
2017-03-31 14:02:05  110.854568 
2017-03-31 14:02:05  110.854744 
2017-03-31 14:02:06  110.854426 
2017-03-31 14:02:06  110.854988 

당신은 우리가 여전히 중복 된 항목이 있지만, DF 우리는 그래서 우리는 여전히 groupby 다시 수행해야하는 사전 처리하지 않은 경우보다 작은 것을 알 수 있습니다 :

In [292]: 
final_df.groupby(level=0).mean() 

Out[292]: 
        press222  
datetime       
2017-03-31 14:02:04  110.854486 
2017-03-31 14:02:05  110.854656 
2017-03-31 14:02:06  110.854707 
+0

완벽! 파일에서 데이터를 읽는 동안 ('read_csv'로) 어떻게 할 수 있습니까? 그건 필수는 아니지만 알아두면 좋을 것입니다. – Robert

+0

청크를 읽고 각 청크를 압축 할 수 있지만 항목이 여러 청크에 걸쳐 있으면 어쨌든 위의 작업을 수행하게됩니다. 그것은 실제로 파일 크기에 달려 있습니다. 업데이트를 게시 할 것입니다. – EdChum

+0

처음 읽기를 줄이는 데 도움이되는 업데이트를 확인하십시오.하지만 다시'groupby' 할 필요가 있습니다. – EdChum