카테고리 없음
[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']