Python Library/Pandas

[Pandas] Pandas 라이브러리와 DataFrame

바보1 2022. 2. 4. 19:49

이번 시간에는 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에서 사용하시는 메소드를 사용할 수 있습니다.

 

그 외에는 특별한게 없네요.

 

지적 환영합니다.

 

 

참고 : 나도코딩