[파이썬 판다스] 항목 제거와 슬라이싱

이현지·2024년 5월 21일

파이썬

목록 보기
2/21

[파이썬 판다스] 축으로부터 항목 제거

1.시리즈: 축으로부터 항목 제거: drop 메소드

먼저 시리즈를 만든다.

시 = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
시

a 0
b 1
c 2
d 3
e 4
dtype: int64

새로운 시리즈(시리즈 이름: 새시)를 만든다.
여기서 c 인덱스를 제거할 것이다.

시리즈이름.drop('제거할 인덱스')

새시 = 시.drop('c')
새시

a, c 인덱스를 제거해보자.

시리즈이름.drop(['인덱스명1', '인덱스명2']) 와 같이 작성한다.

시.drop(['a', 'c'])
b    1
d    3
e    4
dtype: int64

2. 데이터프레임: 두 개의 축으로부터 항목 제거

먼저데이터프레임 을 만든다.

프 = pd.DataFrame(np.arange(3 * 3).reshape(3, 3), index=['ㄱ', 'ㄴ', 'ㄷ'], columns=['A', 'B', 'C'])
프
A	B	C

ㄱ 0 1 2
ㄴ 3 4 5
ㄷ 6 7 8

행으로부터 항목을 제거한다.
ㄱ 행을 제거한다.

데이터프레임이름.drop('제거할 인덱스') 와 같이 작성한다.

프.drop('ㄱ')
A	B	C

ㄴ 3 4 5
ㄷ 6 7 8

axis='columns' 사용

열로부터 항목을 제거한다.
A, B열을 드랍한다.

데이터프레임이름.drop(['제거열1', '제거열2'], axis='columns') 와 같이 작성한다.

프.drop(['A', 'B'], axis='columns')
C

ㄱ 2
ㄴ 5
ㄷ 8

c열만 남은 것을 확인할 수 있다.

3. 원래대로 되돌리기: inplace=True 인자

inplace=True : 원래대로 자료 변경하기

원래대로 자료를 변경할 때 inplace=True를 사용한다.

프.drop(['행이름'], inplace=True) 와 같이 작성한다.

프.drop(['ㄱ'], inplace=True)
프
A	B	C

ㄴ 3 4 5
ㄷ 6 7 8

자료가 원래대로 되돌아왔다.

inplace 주의사항

원래 자료가 변경되면 복구할 수 없다.

4. 인덱싱, 선택, 여과

시리즈 인덱싱에서는 인덱스 항목을 사용할 수 있다.

pd.Series(range(n), index=['인덱스1', '인덱스2', ...])와 같이 작성한다.

시 = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
시

a 0
b 1
c 2
d 3
e 4
dtype: int64

시[1]
시['b']

1
1

인덱싱 할 때 콜론을 이용해서도 선택할 수 있다.
1 부터 3 미만까지 인덱싱해서 나오는 것을 알 수 있다. (b, c 인덱스)

시[1:3]

b 1
c 2
dtype: int64

슬라이싱

슬라이싱 구문 시 [1:3]

시[1:3]은 시리즈 시에서 인덱스 1부터 3까지의 요소를 추출한다.

슬라이싱의 기본 형식: [start:stop]

start는 포함되고, stop은 포함되지 않는다.

인덱스 1부터 3까지 추출한다.

시리즈 시의 인덱스는 ['a', 'b', 'c', 'd', 'e']이고, 각각의 값은 [0, 1, 2, 3, 4] 이다.

시[1:3]을 하면 ['b', 'c']에 해당한다.

인덱스 3인 'd'는 포함되지 않는 것을 알 수 있다.

슬라이싱 연산의 이해

슬라이싱 구문은 [start:stop:step] 형식을 취합니다.

start: 시작 인덱스

stop: 종료 인덱스 (여기서 나오는 숫자는 포함되지 않음)

step: 증가분 (기본값: 1)

기본적인 슬라이싱 구문에서 start와 step을 생략하면 기본값인 0과 1이 사용된다.

예를 들어, [:2]는 0부터 시작하여 2까지의 모든 항목을 하나씩 증가하면서 선택한다.

단, 여기서 종료 인덱스 2는 포함되지 않는다.

인덱스 항목을 통해 슬라이싱

인덱스 항목을 통해서도 특정 인덱스를 선택할 수 있다.
기존 슬라이싱이랑 다르니 주의해야 하는 점이 있다.

주의사항
슬라이싱 끝: stop 항목에 해당하는 자료가 포함된다.

시['b':'c']

b 1
c 2
dtype: int64

선택된 항목에 값을 할당함으로써 기존 자료를 변경할 수 있다.

시['c':'d'] = 0
시

a 0
b 1
c 0
d 0
e 4
dtype: int64

c, d 인덱스에 0으로 변경된 것을 확인할 수 있다.

4-1. 데이터프레임: 선택

프 = pd.DataFrame(np.arange(3 * 4).reshape(3, 4), index=['A', 'B', 'C'], columns=['가', '나', '다', '라'])
프

데이터프레임을 만들 때
pd.DataFrame(np.arange(n * m).reshape(n, m), index=['행1', '행2'], columns=['열1', '열2'])
과 같이 작성한다.

3*4로, 3행 4열로 만들며, 행은 A~C, 열은 가~라 로 만든다.

가	나	다	라

A 0 1 2 3
B 4 5 6 7
C 8 9 10 11

(1) 하나의 열 이름을 통해 접근하면 반환되는 유형: 시리즈

하나의 열 이름을 통해 접근해보자.
열 하나만 입력한다.

데이터프레임이름['열이름1']과 같이 작성한다.

프['가']

A 0
B 4
C 8
Name: 가, dtype: int32

노란색으로 색칠한 곳에 해당된다.

하나의 열이름을 통해 접근하면 이렇게 나온다.

데이터 타입(데이터 유형) 확인하기

  • 유형 확인하기: type(프레임이름['열이름'])
type(프['가'])
pandas.core.series.Series

유형이 시리즈인 것을 확인할 수 있다.

(2) 리스트로 접근하면 반환되는 유형: 데이터프레임

열, 두 개의 열을 반환하려고 한다.
리스트로 접근해야 한다.

데이터프레임[['열이름1','열이름2']] 과 같이 작성한다.

프[['가', '다']]
가	다

A 0 2
B 4 6
C 8 10

하나의 열이름이 아닌 리스트로 접근하면 데이터프레임이 반환되는 것을 알 수 있다.

4-2. 인덱스로 접근하기: : (콜론) 사용하기

인덱스로 접근하기 위해서는 콜론(:) 을 사용해야 한다.

데이터프레임이름[n:m] 와 같이 작성한다.

프[:2]
가	나	다	라

A 0 1 2 3
B 4 5 6 7

행으로 접근하는 것이 가능하다.
[:2]이니까 B행까지 나오는 것을 볼 수 있다.

행 인덱스 항목으로 접근하기

프['A':'C']
가	나	다	라

A 0 1 2 3
B 4 5 6 7
C 8 9 10 11

A 인덱스 ~ C 인덱스까지 나오는 것을 볼 수 있다.

4-3. 논리값으로 활용하기

특정 열에서 논리값 사용하기

프[프['가'] <= 4]
	가	나	다	라
A	0	1	2	3
B	4	5	6	7

행에서 4 이하인 것들만 나오는 것을 볼 수 있다.

데이터프레임 전체에서 논리값 사용하기

'데이터프레임 전체'에 대한 논리값을 이용해서도 접근할 수 있다.

프 < 6

여기서 True, False로 구간이 달라진다.

	가	나	다	라
A	True	True	True	True
B	True	True	False	False
C	False	False	False	False

논리값을 통해 데이터프레임 성분 바꾸기

논리값을 이용해 조건을 만족하는 데이터프레임의 성분을 한꺼번에 바꿀 수 있다.

6 미만인 것들을 0 으로 대입해보자.

프[프 < 6] = 0
프
	가	나	다	라
A	0	0	0	0
B	0	0	6	7
C	8	9	10	11

5. loc(행/열), iloc(정수)를 이용한 선택

loc 행, 열 이름을 가지고 할 수 있는 것

iloc 정수를 가지고 인덱싱하는 것

5-1. 행, 열 이름으로 선택하기: loc

프레임이름.loc['행이름1', ['열이름1', '열이름2']] 과 같이 작성한다.

프.loc['B', ['가', '다']]
가    0
다    6
Name: B, dtype: int32

B 행, 열, 열 기준으로 선택한다.

슬라이싱 활용하기

슬라이싱 과 행 이름, 열 이름을 같이 사용할 수도 있다.

프레임이름.loc['행이름1':'행이름2', ['열이름1', '열이름2']] 과 같이 작성한다.

프.loc['A':'B', ['다', '가']]
   다	가
A	0	0
B	6	0

5-2. 정수로 인덱싱하기: iloc

프레임이름.iloc[n:m, [t, t1, t2]] 와 같이 작성한다.

프.iloc[:2, [3, 0, 1]]
	라	가	나
A	0	0	0
B	7	0	0

정수를 가지고 인덱싱 할 때 iloc 를 사용한다.

[:2]행을 추출하고, 열 기준으로 3번(), 0번(), 1번째() 값들을 추출한다.

인덱스의 인수가 하나만 나오면 이 된다.

프.iloc[2]
가     8
나     9
다    10
라    11
Name: C, dtype: int32

2번째 인덱스를 출력하면 C 인덱스임을 알 수 있다.

profile
관심분야: 추천시스템, 자연어처리, 머신러닝, 딥러닝

0개의 댓글