#판다스의 인덱싱
판다스에서 인덱싱할 때는 loc나 iloc를 많이 사용. loc,iloc를 사용하는 이유는 2차원 인덱싱을 함에 있어 편리하기 때문이다. 일반적으로 라벨(df['a']), 라벨리스트(df['a','b']), 정수인덱스(df[0])를 사용해서 2차원 인덱싱을 하긴 어렵다. 틀린 것은 아니지만 loc와 iloc를 사용하길 권장.
#Series 객체의 인덱싱
-시리즈는 딕셔너리와 상당히 유사하다. 그렇기에 key() 메소드를 사용해도 인덱스 추출 가능하다.
s = pd.Series([0, 0.3, 0.6, 0.9, 1.2], index = ['a', 'b', 'c', 'd', 'e'])
print(s['d'])
>>>
0.9
'b' in s
>>>
True
# keys()로 인덱스 추출가능
print(s.keys())
>>>
Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
#s.items() 자체는 zip으로 묶여 나오기 때문에 list()로 변환해주어야한다.
list(s.items())
>>>
[('a', 0.0), ('b', 0.3), ('c', 0.6), ('d', 0.9), ('e', 1.2)]
#추가
s['f'] = 1.5
s
>>>
a 0.0
b 0.3
c 0.6
d 0.9
e 1.2
f 1.5
인덱스 라벨로 슬라이싱
print(s['b' : 'e'])
range정수로 슬라이싱
print(s[1:5])
>>>
b 0.3
c 0.6
d 0.9
e 1.2
b 0.3
c 0.6
d 0.9
e 1.2
#불리언 인덱싱
s[(s > 0.5) & (s < 1.0)]
>>>
c 0.6
d 0.9
#정수인덱싱
-.iloc[]
정수값)으로 인덱싱과 슬라이싱할 수 있다. i의 뜻이 integer.
s = pd.Series(['a', 'b', 'c', 'd', 'e'], index = [2, 4, 6, 8, 9])
s
>>>
2 a
4 b
6 c
8 d
9 e
s[2]
>>>
'a'
#슬라이싱은 디폴트 인덱스(정수range)로 된다.
s[2:4]
>>>
6 c
8 d
# .iloc[] 으로는 정수값으로 인덱싱함. 디폴트 인덱스로 인덱싱한다고 보면 됨.
s.iloc[1]
>>>
'b'
s.iloc[2:4]
>>>
6 c
8 d
-reindex()
인덱스 새로 설정.
만약 값이 비어있다면 전 값으로 채울 수도 있음. method = 인자로 결측데이터 처리할 수 있음.
s.reindex(range(10)) #굳이 range만을 쓸 필요는 없다. 문자 리스트를 넣어도 되고 자유롭다
>>>
0 NaN
1 NaN
2 a
3 NaN
4 b
5 NaN
6 c
7 NaN
8 d
9 e
#method사용 비어 있으면 이전 값으로 채움.
s.reindex(range(10), method = 'bfill')
>>>
0 a
1 a
2 a
3 b
4 b
5 c
6 c
7 d
8 d
9 e
#DataFrame의 인덱싱
#열라벨 추출
-딕셔너리로 데이터프레임을 만들면 키값은 처음에 열이 되기 때문에 keys()와 .columns는 같다.
#딕셔너리로 데이터 프레임을 만들면 키값은 처음에 열이 되기 때문에
#keys()로 추출하면 열 라벨을 추출할 수 있다.
print(pp_k.keys())
print(pp_k.columns)
>>>
Index(['인구수', '남성', '여성'], dtype='object')
Index(['인구수', '남성', '여성'], dtype='object')
print(pp_k.index)
>>>
Index(['서울_특별시', '부산_광역시', '대구_광역시', '인천_광역시'], dtype='object')
#df['x']
형식으로는 열로 값들로 인덱싱, 슬라이싱 할 수 있다. 그러나 loc와 iloc 사용 권장.
df.x으로도 사용가능하다.
pp_k['남성']
>>>
서울_특별시 40000000
부산_광역시 20000000
대구_광역시 15000000
인천_광역시 15000000
Name: 남성, dtype: int64
#굳이 대괄호안에 열 이름을 넣어 접근 하지 않아도 됨.
pp_k.남성
>>>
서울_특별시 40000000
부산_광역시 20000000
대구_광역시 15000000
인천_광역시 15000000
Name: 남성, dtype: int64
#열 추가
#추가
pp_k['남녀비율'] = pp_k.남성 / pp_k.여성 * 100
>>>
인구수 남성 여성 남녀비율
서울_특별시 80000000 40000000 40000000 100.000000
부산_광역시 35000000 20000000 15000000 133.333333
대구_광역시 25000000 15000000 10000000 150.000000
인천_광역시 25000000 15000000 10000000 150.000000
#df.values : 값들만 추출
#df.values[n] : n행의 값들만 추출
pp_k.values
>>>
array([[8.00000000e+07, 4.00000000e+07, 4.00000000e+07, 1.00000000e+02],
[3.50000000e+07, 2.00000000e+07, 1.50000000e+07, 1.33333333e+02],
[2.50000000e+07, 1.50000000e+07, 1.00000000e+07, 1.50000000e+02],
[2.50000000e+07, 1.50000000e+07, 1.00000000e+07, 1.50000000e+02]])
pp_k.values[1]
>>>
array([3.50000000e+07, 2.00000000e+07, 1.50000000e+07, 1.33333333e+02])
#df.T : 전치하기
#전치 행과 열을 뒤집음. (numpy에도 있음)
pp_k.T
>>>
서울_특별시 부산_광역시 대구_광역시 인천_광역시
인구수 80000000.0 3.500000e+07 25000000.0 25000000.0
남성 40000000.0 2.000000e+07 15000000.0 15000000.0
여성 40000000.0 1.500000e+07 10000000.0 10000000.0
남녀비율 100.0 1.333333e+02 150.0 150.0
#loc
행과 열의 라벨로 인덱싱하거나, 불리언 배열로 인덱싱할 수 있게 해줌.
행만 넣을 수도, 열만 넣을 수도 있다. 열만 넣을 때 형태 주의
loc는 location의 약자
pp_k.loc[ :'인천_광역시', :'남성']
>>>
인구수 남성
서울_특별시 80000000 40000000
부산_광역시 35000000 20000000
대구_광역시 25000000 15000000
인천_광역시 25000000 15000000
이산되어 있는 특정 행과 열을 선택하려면 []로 한번더 감싼다.
# 이산되어 있는 여러 행과 열을 선택하려면, []로 한번더 깜싼다.
pp_k.loc[['서울_특별시', '대구_광역시']]
pp_k.loc[:,['인구수', '여성']]
>>>
인구수 남성 여성 남녀비율
서울_특별시 80000000 40000000 40000000 100.0
대구_광역시 25000000 15000000 10000000 150.0
pp_k.loc[['서울_특별시', '대구_광역시'],['인구수', '여성']]
>>>
인구수 여성
서울_특별시 80000000 40000000
대구_광역시 25000000 10000000
불리언으로 인덱싱(넘파이의 논리인덱싱)
#loc에는 조건도 넣을 수 있다.
pp_k.loc[pp_k.여성 >= 15000000]
>>>
인구수 남성 여성 남녀비율
서울_특별시 80000000 40000000 40000000 100.000000
부산_광역시 35000000 20000000 15000000 133.333333
#iloc
정수인덱싱
#iloc
pp_k.iloc[2:4]
>>>
인구수 남성 여성 남녀비율
대구_광역시 25000000 15000000 10000000 150.0
인천_광역시 25000000 15000000 10000000 150.0
pp_k.iloc[2:4, 1:3]
>>>
남성 여성
대구_광역시 15000000 10000000
인천_광역시 15000000 10000000'DS > 데이터-PANDAS' 카테고리의 다른 글
| PANDAS ST4 특정 행/열 위치교환 (0) | 2022.09.17 |
|---|---|
| PANDAS ST3 멀티 인덱스(다중 인덱스)2, names (0) | 2022.05.23 |
| PANDAS ST3 멀티 인덱스(다중 인덱스)1 (0) | 2022.05.23 |
| PANDAS ST1 Index(색인)객체 (0) | 2022.05.21 |
| PANDAS ST0 판다스,Series,DataFrame. (0) | 2022.05.17 |