반응형
반응형
#pandas, python
아래와 같이 규칙적으로 데이터가 들어오다가 누락되는 상황이 발생하였을 때 보간처리를 하는 방식에 대해 말씀드리겠습니다.
전체흐름 : 시간의 차이 계산 - 새로운 데이터 프레임 생성 - 합치기
최종 코드는 맨 하단에 정리되어있습니다.
1. 세부사항
dif_time = _df['date'].iloc[_idx] - _df['date'].iloc[_idx - 1]
- 이전의 시간과 현재의 시간의 차이를 계산하여 누락이 있는지 확인
if dif_time != pd.Timedelta(minutes=10):
dif_count = dif_time / pd.Timedelta(minutes=10) - 1
- 차이가 있다면 얼마나 차이가 있는지 계산
_new_df = pd.DataFrame(columns=df.columns)
_new_df['date'] = pd.date_range(start=_df['date'].iloc[_idx - 1] + pd.Timedelta(minutes=10),
end=_df['date'].iloc[_idx] - pd.Timedelta(minutes=10), freq="10min")
_new_df['id'] = _id
_df = pd.concat([_df.iloc[:_idx], _new_df, _df.iloc[_idx:]], ignore_index=True)
- 비어있는 DataFrame 생성(컬럼은 같게 하여 같은 형태로 만들어야 됨)
- 차이가 있는 날짜 데이터 생성
- start : 시작일자(이전의 인덱스 + 기준시간(10분) = 위와 같으면 2022-01-01 00:30:00이 됨)
- end : 종료일자(현재 인덱스 - 기준시간(10분) = 위와 같으면 2022-01-01 00:40:00이 됨)
- freq : 주기(위의 예제는 10분 단위로 생성하겠다는 말임)
- 생성된 DataFrame을 concat으로 합치며 마무리
2. 전체코드
더보기
df_result = pd.DataFrame(columns=df.columns)
for _id in df['id'].unique():
print(f'id : {_id} ', end='')
_df = df[df['id'] == _id]
_df.reset_index(drop=True, inplace=True)
_idx = 0
s = len(_df)
while len(_df) > _idx + 1:
_idx += 1
dif_count = 0
dif_time = _df['date'].iloc[_idx] - _df['date'].iloc[_idx - 1]
if dif_time != pd.Timedelta(minutes=10):
dif_count = dif_time / pd.Timedelta(minutes=10) - 1
_new_df = pd.DataFrame(columns=df.columns)
_new_df['date'] = pd.date_range(start=_df['date'].iloc[_idx - 1] + pd.Timedelta(minutes=10),
end=_df['date'].iloc[_idx] - pd.Timedelta(minutes=10), freq="10min")
_new_df['id'] = _id
_df = pd.concat([_df.iloc[:_idx], _new_df, _df.iloc[_idx:]], ignore_index=True)
df_result = pd.concat([df_result, _df], ignore_index=True)
df_result
설명 : id별로 나누어 시간데이터 생성
df_result : 최종 합쳐질 데이터
다른 시간을 원하면 pd.Timedelta, freq의 값을 변경
끝~
반응형
'programming > python' 카테고리의 다른 글
(pandas)판다스 데이터프레임 기본조작(삽입, 삭제, 조회 등) (0) | 2022.11.17 |
---|---|
(Jupyter notebook)파이참 주피터 원격 설정 방법 (0) | 2022.11.16 |
(Ubuntu) 부팅 시 프로그램 자동 실행 설정 (0) | 2022.11.14 |
(Jupyter notebook)주피터 노트북 세팅(원격 연결, 오류(500error) 등) (0) | 2022.11.11 |
(파이썬)백그라운드 실행(jupyter notebook, python 등) (0) | 2022.11.11 |