원래 데이터 프레임이 업데이트되지 않는 이유는 체인 인덱싱으로 인해 데이터 프레임보기가 아닌 복사본이 수정 될 수 있기 때문 입니다. 문서는 이 조언을 제공 :
pandas 객체에서 값을 설정할 때 체인 인덱싱이라는 것을 피하기 위해주의를 기울여야합니다.
몇 가지 대안이 있습니다.
loc
+ 부울 인덱싱
loc
값을 설정하는 데 사용할 수 있으며 부울 마스크를 지원합니다.
df.loc[df['my_channel'] > 20000, 'my_channel'] = 0
mask
+ 부울 인덱싱
시리즈에 할당 할 수 있습니다.
df['my_channel'] = df['my_channel'].mask(df['my_channel'] > 20000, 0)
또는 시리즈를 제자리에서 업데이트 할 수 있습니다.
df['my_channel'].mask(df['my_channel'] > 20000, 0, inplace=True)
조건이 충족 되지 않을 때 원래 시리즈를 할당하여 NumPy를 사용할 수 있습니다 . 그러나 처음 두 솔루션은 지정된 값만 명시 적으로 변경하므로 더 깨끗합니다.
df['my_channel'] = np.where(df['my_channel'] > 20000, 0, df['my_channel'])