numpy/pandas로 같은 값을 연속 어느 정도 연속한 부분을 제거한다

3210 단어 pandasPython3numpy

목적



아무래도 적당한 시계열 데이터 등을 수집하여 보관한다고 한다.
수집 방법에 따라서는 일정한 구간 같은 값을 계속 낼 수 있지만, 그 사이의 분을 기록하고 있는 것은 용량을 압박한다.

예를 들어 아래 그림과 같이 0이 길게 계속되는 구간이 복수 있고, 이것을 제거하고 싶다고 한다.
  • 0이 N 이상 연속 데이터를 제거합니다
  • 0이 비정상적으로 오래 지속되는 것을 제거하고 싶어서 0 그 자체는 남아 있을 수 있다.



  • 구현


  • 먼저 위의 데이터 중 0이 아닌 곳의 index를 추출한다.
  • 색인 번호 간격을 diff로 계산.
  • 간격이 N 이상이 되는 index를 추출.
  • 꺼낼 index를 arrange로 작성.
  • Pandas의 df에서 drop으로 지정하여 단번에 떨어뜨린다.

  • 이하의 코드는 사이즈 조정이 조금 들어가 있다.
    valididx = np.where((data>1e-5) | (data<-1e-5)) # Non zero only count rigid zeros
    spaceidx=np.diff(valididx,prepend=0)
    delidx=np.where(spaceidx>600) # Assume N = 600
    delidxs = []
    for deli in delidx[1]:
        delidxs.extend(np.arange(valididx[0][deli-1],valididx[0][deli]))
    droppedbuff = df.drop(delidxs,axis=0)
    

    여분의 데이터를 떨어뜨리면 아래와 같이 깔끔하게 보인다.

    좋은 웹페이지 즐겨찾기