타임 스탬프, 값 및 품질 플래그가있는 데이터 세트가 몇 개 있습니다. 일부 타임 스탬프에 대한 값 및 품질 플래그가 누락되었으며 주변 데이터에 대한 종속성으로 채워야합니다. 즉,
암호:
import datetime
import pandas as pd
start = datetime.strptime("2004-01-01 00:00","%Y-%m-%d %H:%M")
end = datetime.strptime("2004-01-01 03:00","%Y-%m-%d %H:%M")
df = pd.DataFrame(\
data = {'v' : [1,2,'NaN','NaN','NaN',3,2,1,5,3,'NaN','NaN',12,43,23,12,32,12,12],\
'qf': [1,1,'NaN','NaN','NaN',3,1,5,1,1,'NaN','NaN',1,3,4,2,1,1,1]},\
index = pd.date_range(start, end,freq="10min"))
NA 행을 찾아서 반복하여 첫 번째 기준을 수정 한 다음 보간을 사용하여 두 번째를 해결하여이 문제를 해결하려고했습니다. 그러나 이것은 큰 세트로 작업하기 때문에 정말 느립니다.
한 가지 방법은 가능한 모든 채우기를 수행 한 다음 적절하게 선택하는 것입니다. 수행 한 후 df = df.astype(float)
필요는 (귀하의 예제는 문자열을 사용하는 경우 "NaN"
),이 같은 작업을해야합니다 :
is_null = df.qf.isnull()
fill_down = df.ffill()
fill_up = df.bfill()
df.loc[is_null & (fill_down.qf > fill_up.qf)] = fill_down
df.loc[is_null & (fill_down.qf < fill_up.qf)] = fill_up
df = df.interpolate()
필요한 것보다 더 많은 작업을 수행하지만 수행중인 작업을 쉽게 확인할 수 있으며 수행하는 작업이 벡터화되어 매우 빠르게 발생합니다. ~ 10M 행으로 확장 된 데이터 세트 버전 (동일한 null 밀도 포함)에서는 이전 노트북에서 ~ 6 초가 걸립니다. 귀하의 요구 사항에 따라 충분할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다