이번 시간에는 Pandas라이브러리의 DataFrame을 만들어보겠습니다.
DataFrame이란 2차원 배열 데이터를 의미하며, 앞에서 공부한 Series들의 집합이라고 할 수 있겠네요.
1. 시작하기에 앞서
data를 슬램덩크 8명에 대한 데이터로 한 번 만들어 보겠습니다.
data = {
'이름' : ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
'학교' : ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
'키' : [197, 184, 168, 187, 188, 202, 188, 190],
'국어' : [90, 40, 80, 40, 15, 80, 55, 100],
'영어' : [85, 35, 75, 60, 20, 100, 65, 85],
'수학' : [100, 50, 70, 70, 10, 95, 45, 90],
'과학' : [95, 55, 80, 75, 35, 85, 40, 95],
'사회' : [85, 25, 75, 80, 10, 80, 35, 95],
'SW특기' : ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']
}
data
{'이름': ['채치수', '정대만', '송태섭', '서태웅', '강백호', '변덕규', '황태산', '윤대협'],
'학교': ['북산고', '북산고', '북산고', '북산고', '북산고', '능남고', '능남고', '능남고'],
'키': [197, 184, 168, 187, 188, 202, 188, 190],
'국어': [90, 40, 80, 40, 15, 80, 55, 100],
'영어': [85, 35, 75, 60, 20, 100, 65, 85],
'수학': [100, 50, 70, 70, 10, 95, 45, 90],
'과학': [95, 55, 80, 75, 35, 85, 40, 95],
'사회': [85, 25, 75, 80, 10, 80, 35, 95],
'SW특기': ['Python', 'Java', 'Javascript', '', '', 'C', 'PYTHON', 'C#']}
type(data)를 하면 dict로 나오는 것이 확인되네요.
아 참고로 주피터 노트북을 사용하고 있으므로, print(data)가 아니라 data를 해도 정상 출력되는 점을 참고해주세요.
2. DataFrame 생성
import pandas as pd
df = pd.DataFrame(data)
df
DataFrame의 약자를 보통 df라고 합니다. 그래서 df = pd.DataFrame(data)를 통해 앞에서 만든 슬램덩크 8명에 대한 데이터를 넣고, 출력했습니다.
이름 학교 키 국어 영어 수학 과학 사회 SW특기
0 채치수 북산고 197 90 85 100 95 85 Python
1 정대만 북산고 184 40 35 50 55 25 Java
2 송태섭 북산고 168 80 75 70 80 75 Javascript
3 서태웅 북산고 187 40 60 70 75 80
4 강백호 북산고 188 15 20 10 35 10
5 변덕규 능남고 202 80 100 95 85 80 C
6 황태산 능남고 188 55 65 45 40 35 PYTHON
7 윤대협 능남고 190 100 85 90 95 95 C#
이렇게 출력이 되는 모습을 확인할 수 있습니다.
참고로
df = pd.DataFrame([[1,2,3],
[4,5,6],
[7,8,9]])
df
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
이런 형태로도 만들 수 있습니다.
3. DataFrame 검색
DataFrame 검색은 앞의 Series에서 했던 것처럼 하시면 됩니다.
df['이름']
0 채치수
1 정대만
2 송태섭
3 서태웅
4 강백호
5 변덕규
6 황태산
7 윤대협
Name: 이름, dtype: object
이렇게 잘 나옵니다.
그리고 여러개의 정보를 확인하고 싶다면, Series에서 했던 것처럼 대괄호 두 개를 적은 다음에 하시면 됩니다.
df[['이름', '키']]
이름 키
0 채치수 197
1 정대만 184
2 송태섭 168
3 서태웅 187
4 강백호 188
5 변덕규 202
6 황태산 188
7 윤대협 190
이때는 대괄호 두 개를 써야 한다는 점을 유의해주세요
4. Index와 Column를 지정해서 DataFrame 생성
- Index를 지정해서 생성
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'])
df
이름 학교 키 국어 영어 수학 과학 사회 SW특기
1번 채치수 북산고 197 90 85 100 95 85 Python
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80
5번 강백호 북산고 188 15 20 10 35 10
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
이렇게 하면 index를 지정해서 DataFrame을 생성하실 수 있습니다.
이때, 주의해야할 점이 index의 갯수와 정보의 갯수가 완전히 동일해야합니다!
한 번 '8번'을 없애고 재실행 해보겠습니다.
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번', '7번'])
df
ValueError Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in create_block_manager_from_arrays(arrays, names, axes, consolidate)
1773 blocks = _form_blocks(arrays, names, axes, consolidate)
-> 1774 mgr = BlockManager(blocks, axes)
1775 except ValueError as e:
~\anaconda3\lib\site-packages\pandas\core\internals\managers.py in __init__(self, blocks, axes, verify_integrity)
913
--> 914 self._verify_integrity()
915
~~~~~~
오류가 뜹니다. 항상 index 개수를 주의해서 작성해주세요.
- Colum을 지정해서 생성
df = pd.DataFrame(data, columns=['이름', '학교', '키'])
df
이름 학교 키
0 채치수 북산고 197
1 정대만 북산고 184
2 송태섭 북산고 168
3 서태웅 북산고 187
4 강백호 북산고 188
5 변덕규 능남고 202
6 황태산 능남고 188
7 윤대협 능남고 190
이렇게 하시면 column을 지정해서 DataFrame을 생성하실 수 있습니다.
이때, 순서를 바꾸면 데이터의 순서도 바뀝니다.
이때도 column 정보가 없는 값을 넣으면 NaN이 나옵니다!
df = pd.DataFrame(data, columns=['이름', '키', '학교', '가족'])
df
이름 키 학교 가족
0 채치수 197 북산고 NaN
1 정대만 184 북산고 NaN
2 송태섭 168 북산고 NaN
3 서태웅 187 북산고 NaN
4 강백호 188 북산고 NaN
5 변덕규 202 능남고 NaN
6 황태산 188 능남고 NaN
7 윤대협 190 능남고 NaN
주의해주세요!
- index, column을 지정해서 생성
df = pd.DataFrame(data, index=['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'], columns=['이름', '키', '학교'])
df
이름 키 학교
1번 채치수 197 북산고
2번 정대만 184 북산고
3번 송태섭 168 북산고
4번 서태웅 187 북산고
5번 강백호 188 북산고
6번 변덕규 202 능남고
7번 황태산 188 능남고
8번 윤대협 190 능남고
이렇게 index와 columns를 지정해서 생성해주시면 DataFrame이 저희가 원하는 방향으로 생성되는 것을 보실 수 있습니다.
5. 요약
DataFrame은 2차원 배열을 위한 자료구조입니다.
DataFrame은 Series의 집합이라고 생각하시면 됩니다.
대부분 Series에서 사용하시는 메소드를 사용할 수 있습니다.
그 외에는 특별한게 없네요.
지적 환영합니다.
참고 : 나도코딩
'Python Library > Pandas' 카테고리의 다른 글
[Pandas - Python] Pandas 라이브러리와 데이터의 선택(loc, iloc) (0) | 2022.02.07 |
---|---|
[Pandas - Python] Pandas 라이브러리와 데이터 확인 및 선택(기본) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 파일 저장 및 열기(excel, csv, txt) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 Index 정리 (0) | 2022.02.04 |
[Pandas] Pandas 라이브러리와 Series (0) | 2022.02.04 |