- 과거내용
- DataFrame - 가공
1. 삽입
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#삽입
df.insert(3,'col4',[10,11,12])
col1 col2 col3 col4
row1 1 2 3 10
row2 4 5 6 11
row3 7 8 9 12
insert 명령어로 각각 삽입될 열의 위치, 이름, 값을 순서대로 입력하여 삽입할 수 있다.
2. 꺼내기
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#열 제거
df.pop('col1')
col2 col3
row1 2 3
row2 5 6
row3 8 9
pop을 사용해서 제거 혹은 꺼낼 열의 이름을 입력한다.
3. 복사
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#복사
df2=df.copy(deep=False)
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
deep이 False인 경우 복사본이나 원본이 수정되면 같이 수정된다.
C의 포인터와 느낌이 비슷한 것 같다.
4. 행/열 삭제
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#삭제
df=df.drop(labels='row1',axis=0)
col1 col2 col3
row2 4 5 6
row3 7 8 9
drop의 labels와 axis를 사용해서 삭제했다. 이외에도 index와 columns를
사용해서 삭제할 수 있다.
5. 행 추가
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#행 추가
df2=df.drop(labels='row1',axis=0)
df=df.append(df2,sort=True,ignore_index=True)
col1 col2 col3
0 1 2 3
1 4 5 6
2 7 8 9
3 4 5 6
4 7 8 9
append의 sort를 사용해 사전순으로 정렬하고, ignore_index는 기존 index를
무시할 수 있게 해준다. 이외에도 verify_integrity를 사용하면 중복되는 인덱스가 있으면
오류를 발생할 수 있다.
6. 자르기
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
#자르기
df=df.truncate(before='col2',after='col2',axis=1)
col2
row1 2
row2 5
row3 8
truncate의 before는 그 값보다 전 값을 삭제하고, after는 그 값의 후를 삭제한다.
axis는 행과 열을 택해 삭제할 수 있다.
7. 중복행 제거
#원본 데이터
col1 col2 col3
row1 1 2 3
row2 4 2 6
row3 7 8 9
#중복행 제거
df=df.drop_duplicates(subset='col2')
col1 col2 col3
row1 1 2 3
row3 7 8 9
drop_dupicates의 subset을 통해 중복행을 찾고 삭제한다.
추가로 keep 옵션을 사용해 중복행 중 어떤 행을 남길지 고를 수 있다.
이외에도 ignore_index, inplace 등의 옵션이 있다.
8. 차원축소
#원본 데이터
col1 col2
row1 1 2
#축소
print(df.squeeze())
col1 1
col2 2
Name: row1, dtype: int64
1개의 열 또는 행만 있는 데이터그램을 squueze하면 시리즈가 된다.
1개의 값만 가지면 스칼라 값이 되며, 압축이 안 되는 경우 원본을 반환한다.
9. 피벗변환
#원본 데이터
A B C
0 a 10 100
1 b 20 200
2 c 30 300
#피벗변환
print(df.pivot(index='A',columns='B',values='C'))
B 10 20 30
A
a 100.0 NaN NaN
b NaN 200.0 NaN
c NaN NaN 300.0
pivot으로 index, columns, values를 선택해서 피벗 테이블을 만들 수 있다.
values를 지정하지 않으면 모든 데이터가 입력된다. 피벗 변환이 불가한 경우
오류가 발생한다.
10. 피벗생성
#원본 데이터
A B C
0 a 10 100
1 b 20 200
2 c 30 300
#피벗생성
print(df.pivot_table(index='A',columns='B',values='C',aggfunc=np.sum,sort=True))
B 10 20 30
A
a 100.0 NaN NaN
b NaN 200.0 NaN
c NaN NaN 300.0
pivot과 마찬가지로 index, columns, values를 입력하고 추가로 aggfunc를 이용해
함수를 사용할 수 있다. 또한 sort로 정렬을 어떻게 할 지 설정할 수 있다.
이외에도 fill_value, margines 등의 옵션이 있다.
11. 피벗해제
#원본 데이터
A B C
0 a 10 100
1 b 20 200
2 c 30 300
#피벗해제
print(df.melt(id_vars='A',value_vars=['B','C']))
A variable value
0 a B 10
1 b B 20
2 c B 30
3 a C 100
4 b C 200
5 c C 300
melt를 이용해서 'A'를 기준으로 'B','C'를 하위 값으로 피벗해제를 진행한 것이다.
12. 새 열 할당
#원본 데이터
A B
0 1 10
1 2 20
#새 열 할당
print(df.assign(C=lambda x:x.B+5))
A B C
0 1 10 15
1 2 20 25
assign을 이용해서 새로운 열을 lambda 함수를 이용해서 식을 만들어
추가할 수 있다.
13. 값 변경
#원본 데이터
A B
0 1 10
1 2 20
#값 변경
print(df.replace(to_replace=1, value=3))
A B
0 3 10
1 2 20
replace 함수의 to_replace는 바꿀 값이고 value는 바꾼 값이다.
value 대신 method를 사용해 bfill, ffill 등이 가능하다.
또한 limit로 몇 개나 바꿀지 설정할 수 있다.
이외에도 regax를 사용해서 정규표현식을 이용할 수 있다.
14. 값 전개
#원본 데이터
A B
0 [1, 10] [2, 20]
#값 전개
print(df.explode(column=['A','B']))
A B
0 1 2
0 10 20
explode 함수를 이용해 전개할 column을 선택해 전개할 수 있다.
빈 리스트의 경우는 NaN 값을 반환한다.
추가로 ignore_index 옵션을 사용해 기존 인덱스를 무시할 수 있다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
EDA - 1단계 : 데이터 다루기 - 확인 (1) | 2023.07.16 |
---|---|
EDA - 1단계 : 데이터 다루기 - 정보 (1) | 2023.07.15 |
EDA - 1단계 : 데이터 다루기 - 정렬, 결합 (3) | 2023.07.11 |
EDA - 1단계 : 데이터 다루기 - 비교, 필터링, 결측치 (2) | 2023.07.10 |
EDA - 1단계 : 데이터 다루기 - 함수 적용, 인덱싱 (1) | 2023.07.08 |