[판다스] 데이터 프레임 행 별 열 별 값 조회

밍키·2020년 8월 12일
0

판다 판다 판다스

목록 보기
7/12

1. 열(컬럼) 조회


시리즈로 리턴한다.

  • df['컬럼명']
    • 컬럼 이름이 정수면 정수를 넣어주면 된다.
  • df.컬럼명
    • 컬럼 이름에 공백이 들어가 있으면 사용할 수 없다.
  • 팬시 indexing
    • 여러개의 컬럼을 조회할 경우 컬럼명들을 담은 리스트/튜플로 조회
  • 주의
    • df[컬럼index] 는 안된다.
    • df[0:3] 슬라이싱은 행 조회다.
    • 만약 indexing이나 slicing을 이용해 컬럼값 조회하려면 columns 속성을 이용한다.
    • df[df.columns[:3]]

1.1 TODO


# 컬럼은 아무튼 순번으로 하는건 안된다.

# 컬럼으로 조회
grade['국어']

# 점표기법으로 조회
grade.국어
# 점표기보다 대괄호를 사용하는 것이 좋다.

# 팬시 인덱싱
grade[['총점', '평균']]

# 순번으로 인덱싱
# grade[0] # 에러발생
grade.iloc[0]

# 슬라이싱
grade[1:3] # 행이 슬라이싱 된다. => 행 조회
# 열은 슬라이싱할 수 없다.

# 컬럼 인덱싱, 슬라이싱 해보기
grade.columns[0] # 요거를 이용해서 인덱싱 슬라이싱 가능.
cols = grade.columns
grade[cols[0]]
# 직접은 할 수 없다. 
grade[cols[1:3]]

1.2 다양한 열선택 기능을 제공하는 메서드들


  • select_dtypes(include=[데이터타입,..], exclude=[데이터타입,..])
    • 전달한 데이터 타입의 열들을 조회.
    • include : 조회할 열 데이터 타입
    • exclude : 제외하고 조회할 열 데이터 타입
  • filter (items=[], like='', regex='')
    매개변수에 전달하는 열의 이름에 따라 조회
    각 매개변수중 하나만 사용할 수 있다.
    • items = [ ]
      • 리스트와 일치하는 열들 조회
      • 이름이 일치 하지 않아도 Error 발생안함.
    • like = “ “
      • 전달한 문자열이 들어간 열들 조회
      • 부분일치 개념
    • regex = “ ”
      • 정규 표현식을 이용해 열명의 패턴으로 조회

1.3 TODO

# 컬럼의 타입 변경
grade['총점'] = grade['총점'].astype(np.float)
grade['평균'] = grade['평균'].astype(np.float)

# 컬럼을 타입으로 조회할 때
# grade.select_dtypes(include=[np.int64]) # int64 타입만 조회
grade.select_dtypes(include=[np.int64, np.float64]) # 여러 개 타입 조회 가능

# 타입을 제외하고 조회하기
grade.select_dtypes(exclude=[np.float64]) # float64 타입 제외하고 조회하기.

# 정규 표현식으로 컬럼 조회하기
df.filter(regex=r'actor_\d_name').head()

# 특정 문자열이 들어간 컬럼 조회
df.filter(like='actor_1').head()

# 없는 컬럼을 조회하면 에러가 발생한다.
# df[['color','director']] # 에러발생
# 아이템스 사용
df.filter(items=['color', 'director']).head()
# 없으면 에러가 발생하는게 아니라 무시함. 
# 라잌 딕셔너리 get

2. 행 조회


  • loc : index 이름으로 조회
  • iloc : 행 순번으로 조회

2.1 loc : 행 이름으로 조회


  • DF.loc[ index이름 ]
    • 한 행 조회.
    • 조회할 행 index 이름(레이블) 전달
    • 이름이 문자열이면 " " 문자열표기법으로 전달. 정수이며 정수표기법으로 전달한다.
  • DF.loc[ index이름 리스트 ]
    • 여러 행 조회.
    • 팬시 인덱스
    • 조회할 행 index 이름(레이블) 리스트 전달
  • DF.loc[start index이름 : end index이름: step]
    • 슬라이싱 지원
    • end index 이름의 행까지 포함한다.
  • DF.loc[index이름 , 컬럼이름]
    • 행과 열 조회
    • 둘다 이름으로 지정해야 함.

2.1.1 TODO

# loc 는 무적권 이름으로만 조회한다.
# 이름으로 슬라이싱할 때는 엔드 인덱스를 포함한다.

# [] 인덱서라고 한다.
# 록인덱서 아이록인덱서

# 인덱싱
grade.loc['id-1']

# 팬시 인덱싱
grade.loc[['id-1','id-3','id-4']]

# 슬라이싱
grade.loc['id-1':'id-4'] # end index 포함. id-4도 출력됨.

# 행을 기준으로 열 조회
# grade.loc['id-1']['영어']
grade.loc['id-1','영어'] # 이게 더 속도가 빠르다.
grade.loc['id-1', ['영어','수학','과학']]

# 데이터프레임 인덱싱
grade.loc['id-1':'id-4', '국어':'과학']
# 따로 괄호로 감싸주지 않아도 됨.

# 컬럼 생략 => 모든 컬럼 조회
grade.loc[:,:]
grade.loc[:,] # 사실 쉼표 안써도 된다.
grade.loc[:] # 전체 조회
# 다 같음.

# grade.loc[,:] # 에러발생
# 행 생략은 불가능

grade.loc[:,'수학':'평균']

2.2 iloc : 행 순번으로 조회


  • DF.iloc[행번호]
    • 한 행 조회.
    • 조회할 행 번호 전달
  • DF.iloc[ 행번호 리스트 ]
    • 여러 행 조회.
    • 조회할 행 번호 리스트 전달
  • DF.iloc[start 행번호: stop 행번호: step]
    • 슬라이싱 지원
    • stop 행번호 포함 안함.
  • DF.iloc[행번호 , 열번호]
    • 행과 열 조회
    • 행열 모두 순번으로 지정

2.2.1 TODO

# grade.iloc[]
# 컬럼은 생략 가능, 인덱스는 생략이 안됨.

# 매개변수 파라미터 인수 인자
# argument 인수 전달인수

# 순번으로 조회
grade.iloc[0]

# 순번으로 슬라이싱
grade.iloc[1:4] # end index를 포함하지 않는다.

grade.iloc[0,0]

# 반드시 순번으로 지정해 줘야 한다.

# 음수 인덱싱
grade.iloc[-1]

3. boolean indexing을 이용한 조회


  • 행, 열에 조건식을 이용해 원하는 조건의 행이나 열을 조회

  • 다중 조건의 경우 ( )로 묶는다.

  • DataFrame객체[조건], DataFrame객체.loc[조건]

    • 조건이 True인 행만 조회
    • 열까지 선택시
      • DataFrame객체[조건][열]
      • DataFrame객체.loc[조건, 열]
  • iloc[]은 boolean indexing을 지원하지 않는다.

# boolean indexing 은 행을 조회한다. 
# True 인 행.
grade[[True, False, False, True, False]]

grade.loc[grade['과학']>70]

# 과학이 70점 이상인 친구들의 국어 영어 점수
grade.loc[grade['과학']>70][['국어','영어']]

# 안에 넣어서
grade.loc[grade['과학']>70,['국어','영어']]

grade.loc[(grade['국어']>=80) & (grade['영어']>=80)]

grade.loc[(grade['국어']>=80) | (grade['영어']>=80)]

grade.loc[(grade['국어']>=80) | (grade['영어']>=80), ['국어','영어']]

profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글