[파이썬 판다스] 축으로부터 항목 제거
먼저 시리즈를 만든다.
시 = 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
먼저데이터프레임 을 만든다.
프 = 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열만 남은 것을 확인할 수 있다.
inplace=True 인자 inplace=True : 원래대로 자료 변경하기
원래대로 자료를 변경할 때 inplace=True를 사용한다.
프.drop(['행이름'], inplace=True) 와 같이 작성한다.
프.drop(['ㄱ'], inplace=True)
프
A B C
ㄴ 3 4 5
ㄷ 6 7 8

자료가 원래대로 되돌아왔다.
원래 자료가 변경되면 복구할 수 없다.
시리즈 인덱싱에서는 인덱스 항목을 사용할 수 있다.
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으로 변경된 것을 확인할 수 있다.
프 = 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']과 같이 작성한다.
프['가']
A 0
B 4
C 8
Name: 가, dtype: int32

노란색으로 색칠한 곳에 해당된다.
하나의 열이름을 통해 접근하면 이렇게 나온다.
type(프레임이름['열이름'])type(프['가'])
pandas.core.series.Series
유형이 시리즈인 것을 확인할 수 있다.
가와 다 열, 두 개의 열을 반환하려고 한다.
리스트로 접근해야 한다.
데이터프레임[['열이름1','열이름2']] 과 같이 작성한다.
프[['가', '다']]
가 다
A 0 2
B 4 6
C 8 10

하나의 열이름이 아닌 리스트로 접근하면 데이터프레임이 반환되는 것을 알 수 있다.
인덱스로 접근하기 위해서는 콜론(:) 을 사용해야 한다.
데이터프레임이름[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]
가 나 다 라
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
loc 행, 열 이름을 가지고 할 수 있는 것
iloc 정수를 가지고 인덱싱하는 것
프레임이름.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

프레임이름.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 인덱스임을 알 수 있다.