관리 메뉴

DeseoDeSeo

[Python] Pandas_색인 , DataFrame 본문

카테고리 없음

[Python] Pandas_색인 , DataFrame

deseodeseo 2023. 8. 22. 19:22
색인 _인덱싱
  • 인덱싱
  • 슬라이싱
  • Boolean 색인

<  Series 인덱싱 >

1. 숫자형 인덱스 사용

   

print ( s2015 [1] )

 

2, 인덱스 라벨 사용

   

print ( s2015 ['부산'] )


Q : Series클래스를 유지하면서 결과 출력

 print( s2015[[1]])
print(s2015[[1,3,0,1]])

색인_ 슬라이싱

<  Series 슬라이싱 >

 

1. 숫자형 인덱스 사용 (끝 숫자의 -1까지 출력)

print(s2015[1:3])

2. 인덱스 라벨 사용 ( 끝 인덱스 라벨까지 출력)

print(s2015['부산':'대구'])

색인_ Boolean

         < Series Boolean색인 >

b = s2015 >= 3000000
s2015[b]

Null 값 판별 함수

# Series 클래프명.isnull() -> null은 True, 
# Series클래스명 .notnull()-> null 은 False

 s15_10 = s2015-s2010
s15_10.notnull()
print(s15_10[s15_10.notnull()])

 

 

실습) 2015년도와 2010년도의 인구 증가율(%) 계산

- 인구 성장률 = (해당연도인구 - 해당연도의 전년도 인구) /(해당연도의 전년도인구) * 100

ratePopulation = (s2015 - s2010) / s2010 *100
ratePopulation[ratePopulation.notnull()]

 

Series 데이터 갱신, 추가, 삭제
ratePopulation['부산'] =1.6
ratePopulation['광주'] = 1.41
del ratePopulation['대구']
ratePopulation

 

DataFrame
딕셔너리 이용해서 생성하기
dic3 = {"2015": [9904312, 3448737, 2890451, 2466052], "2010": [9631482, 3393191, 2632035, 2431774]}
df1 = pd.DataFrame(dic3)
df1

 

인덱스명
df1.index =['서울','부산','인천','대구']
df1​

리스트 이용해서 생성하기
li1 = [[9904312, 3448737, 2890451, 2466052],[9631482, 3393191, 2632035, 2431774]]
ind =['2015','2010']
col=['서울','부산','인천','대구']
df2 = pd.DataFrame(li1, index =ind, columns = col)
# df2.index = ind
# df2.columns = col

li2 =[9904312, 9631482], [3448737, 3393191], [2890451, 2632035], [2466052, 2431774]
df3 = pd.DataFrame(li2)
df3

DataFrame 행/ 열 변환
df2.T

df2.transpose()

 

DataFrame 값 확인
print(df1.values)

# DataFrame 인덱스 확인
print(df1.index)

# DataFrame 컬럼 확인
print(df1.columns)

# 행, 열 개수
print(df1.shape)

# 차원 확인
print(df1.ndim)

# 전체 요소개수
print(df1.size)

# 데이터 정보 일부 보기 (기본적으로 위에서 5개 정도 보여줌) 괄호 안에 2를 넣으면 2개만 보여줌.
df1.head()

# 뒤에서부터 보려면
df1.tail()

컬럼 추가
df1['2005']= [9762546, 3512547, 2517680, 2456016]
df1​

DataFrame 색인
  •  인덱싱 : 열(컬럼) 인덱싱
  •   슬라이싱 : 행 슬라이싱
  •  boolean 색인 : 행 색인 (행의 개수와 boolean 타입?!의 개수가 동일해야한다)
  • 인덱서 활용 : 행, 열 색인
 인덱싱

  : 열(컬럼) 인덱싱 / 컬럼명만 사용 가능, 숫자 사용 불가능

# [컬럼명]
# 결과값이 series class로 나옴.
df1['2010']

df1[['2005','2010','2015']]

DataFrame 슬라이싱

 : 행 색인( 숫자형 인덱스, 인덱스 라벨 사용 가능)

  - 컬럼 슬라이싱 불가능

df1['서울':'부산']
df1[:2]

df1[:1]
# 슬라이싱은 행만 가져오는 것. 열은 안 됨.

df1[['2015']]

df1[['2015']]['부산':'대구']

# 강사님
df1[['2015']][1:]

df1[1:][['2015']]

# 콤마로 구분함.!!
df1[['2010','2005']][1:3]


 

loc [ ], iloc[ ] 인덱서

 loc : 이름(='라벨') 을 기준으로 데이터를 읽음.

iloc : '번호'를 기준으로 데이터를 읽음.

  • loc [ ]

     - 실제 인덱스 라벨과 컬럼명을 사용하여 행을 가지고 올 때 사용

     - df.loc[행]

      -df.loc[행, 열]

  • iloc [ ]

         - numpy의 array인덱싱 방식으로 행을 가지고 올 때 사용 ( boolean 색인 불가능!)

         -  df.iloc[행]

         - df.iloc[행, 열]

 

df1.loc['부산']

 

[ [  ] ] 대괄호 2개이면 dataframe형태로 가져옴.
df1.loc[['부산']]

# 대괄호 넣으면 데이터 프레임 형태로 출력.
df1.loc['부산':'인천',['2010']]

iloc 인덱서
df1.iloc[1:3,1:]

df1.iloc[1:3,[2]]

Boolean 색인
: 행 색인
- true에 매칭되는 결과 출력
( loc 적용 가능, iloc X)
li2=[True, True, False, False]
df1[li2]

li3 = df1['2010'] >=2500000
df1[li3][['2010','2015']]

df1.loc[li3,'2010':'2005']