Python/Pandas

[Pandas] 특정 위치의 데이터 추출: df.at, df.iat / 조건 인덱싱

Jenny Noh 2023. 11. 15. 23:49

예시로 사용할 데이터프레임을 불러옵니다.

 


1. 특정 위치의 데이터 추출

행과 열을 콕 찝어서 해당하는 위치의 데이터를 추출하거나 다른 값으로 변경하고자 할 때는 df.at[] 과 df.iat[]을 사용합니다.

 

  ① df.at[행,열]  

'행'위치에 인덱스를, '열' 위치에 컬럼의 이름을 전달해 주면 해당 위치의 값이 반환됩니다.

c행 E열의 값!

 

 

  ② df.iat[행,열]  

df.iat[ ]은 df.at[ ]과 비슷하게 지정한 위치의 데이터를 반환합니다.

다만 전달 값으로 행과 열의 index 값을 전달한다는 차이가 있습니다.

0행 0열의 값!

 

 

  ③ 값 변경하기  

지정한 위치의 데이터를 다른 값으로 변경하고 싶다면 df.at 또는 df.iat으로 위치를 집어주고 변경하고자 하는 값을 할당해 주면 됩니다.

c행 E열의 값을 999로 변경!

 

 


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 로도 조건을 걸어주어 동일한 결과값을 반환할 수 있습니다. 😉