[Pandas] 특정 위치의 데이터 추출: df.at, df.iat / 조건 인덱싱
예시로 사용할 데이터프레임을 불러옵니다.
1. 특정 위치의 데이터 추출
행과 열을 콕 찝어서 해당하는 위치의 데이터를 추출하거나 다른 값으로 변경하고자 할 때는 df.at[] 과 df.iat[]을 사용합니다.
① df.at[행,열]
'행'위치에 인덱스를, '열' 위치에 컬럼의 이름을 전달해 주면 해당 위치의 값이 반환됩니다.
② df.iat[행,열]
df.iat[ ]은 df.at[ ]과 비슷하게 지정한 위치의 데이터를 반환합니다.
다만 전달 값으로 행과 열의 index 값을 전달한다는 차이가 있습니다.
③ 값 변경하기
지정한 위치의 데이터를 다른 값으로 변경하고 싶다면 df.at 또는 df.iat으로 위치를 집어주고 변경하고자 하는 값을 할당해 주면 됩니다.
2. 조건 인덱싱
df[ *** ]에서 *** 부분에 boolean 값으로 반환되는 동일한 구조의 Series 객체를 넣어주면 (=조건), 해당 조건이 True에 해당하는 레코드만 추출할 수 있습니다.
엑셀에서 특정 열 기준으로 데이터를 필터링 하는 기능과 비슷하다고 생각하면 됩니다.
① 열 기준 조건 인덱싱
전체 df에서 'A' 컬럼의 값이 50을 초과하는 행만 반환하는 코드입니다.
이 때 df['A'] > 50 조건식을 출력하면 [False, True, False, ...] 값을 가지는 Series 객체로 반환되는 것을 알 수 있습니다.
② 행 기준 조건 인덱싱
이때, 행을 기준으로 조건에 부합하는 열을 반환하고 싶다면 df.loc[ : , 행에 대한 조건]으로 작성하면 됩니다.
* []안의 식 = 모든 행 가져오기, 행 조건을 만족하는 열만 가져오기
아래는 b행의 데이터가 50 초과인 열들을 모든 행에 대해서 반환하는 코드입니다.
③ 전체 데이터프레임 조건 인덱싱
이 때, 조건식에 특정 컬럼이 아닌 전체 데이터 프레임에 대해서 조건을 넣어주면 인덱싱되어 반환되는 값은 조건을 만족하면 데이터 값 그대로, 만족하지 않으면 NaN 값으로 출력됩니다.
* df[df 조건 ]
아래의 예시에서 전체 df에 대해서 짝수 조건을 걸어준 값과 열 'A'에 대해서만 짝수 조건을 걸어준 값이 다르게 반환되는 것을 확인할 수 있습니다.
④ 특정 값을 지정하여 인덱싱
df[특정열.isin([지정값 목록])]을 사용하면 특정 컬럼의 값이 지정한 값(들)에 포함되는지 여부로 인덱싱을 할 수 있습니다.
df2에 'one' 또는 'two'를 값으로 가지고 있는 새로운 열 'K'를 추가해주고,
df2['K']의 값이 지정한 ['one'] 에 포함되는 데이터만 출력해 보았습니다.
'K'열의 값이 'one'인 레코드만 출력되는 것을 확인할 수 있습니다.
지정값을 ['one', 'two']로 바꿔서 출력해보면 'one' 또는 'two'를 값으로 가지고 있는 레코드가 출력된 것을 알 수 있습니다.
추가! ) 위 작업은 numpy의 np.logical_and 또는 np.logical_or 로도 조건을 걸어주어 동일한 결과값을 반환할 수 있습니다. 😉