1. 필수패키지 참조
1
2
|
>>> pip install --upgrade openpyxl
>>> pip install --upgrade xlrd
|
cs |
1
2
3
|
>>> from pandas import DataFrame # 데이터프레임 클래스
>>> from pandas import read_csv # csv파일을 읽어들이기 위한 함수
>>> from pandas import ExcelFile # Excel 파일을 읽어들이기 위한 클래스
|
cs |
2. 데이터 프레임 생성하기
객체 = DataFrame(데이터, index = [ ], columns = [ ] ) |
1) 데이터의 종류
- 2차원리스트
- 리스트를 원소로 갖는 딕셔너리
- 동일한 구조를 갖는 딕셔너리들이 모인 리스트
- csv파일
- xlsx 파일
2) 2차원리스트를 사용하여 DataFrame 생성
- 각각 1차 리스트가 DataFrame에서 하나의 행이 된다
- 인덱스와 컬럼 이름은 0부터 순차적으로 부여
1
2
3
4
5
6
7
8
9
10
|
>>> list = [
>>> [1, '남자', 98, 88, 64],
>>> [2, '여자', 88, 90, 62, 72],
>>> [1, '남자', 92, 70, None, None],
>>> [3, '여자', 63, 60, 31, 70],
>>> [4, '남자', 120, 50, None, 88]
>>> ]
>>> df = DataFrame(list)
>>> print(df)
|
cs |
--> 결과
0 | 1 | 2 | 3 | 4 | 5 | |
0 | 1 | 남자 | 98 | 88 | 64.0 | NaN |
1 | 2 | 여자 | 88 | 90 | 62.0 | 72.0 |
2 | 1 | 남자 | 92 | 70 | NaN | NaN |
3 | 3 | 여자 | 63 | 60 | 31.0 | 70.0 |
4 | 4 | 남자 | 120 | 50 | NaN | 88.0 |
* 컬럼과 인덱스 이름 지정
1
2
3
4
5 |
>>> df = DataFrame(list,
>>> columns=['학년', '성별', '국어', '영어', '수학', '과학'],
>>> index=['철수', '영희', '민수', '수현', '호영'])
>>> print(df) |
cs |
--> 결과
학년 | 성별 | 국어 | 영어 | 수학 | 과학 | |
철수 | 1 | 남자 | 98 | 88 | 64.0 | NaN |
영희 | 2 | 여자 | 88 | 90 | 62.0 | 72.0 |
민수 | 1 | 남자 | 92 | 70 | NaN | NaN |
수현 | 3 | 여자 | 62 | 60 | 31.0 | 70.0 |
호영 | 4 | 남자 | 120 | 50 | NaN | 88.0 |
3) 리스트를 원소로 갖는 딕션너리를 사용한 DataFrame 생성
- 딕셔너리의 key가 컬럼의 이름으로 사용되기 때문에 index만 추가 지정
1
2
3
4
5
6
7
8
9
10
11
12 |
>>> source = {
>>> '학년': [1, 2, 1, 3, 4],
>>> '성별': ['남자', '여자', '남자', '여자', '남자'],
>>> '국어': [98, 88, 92, 63, 120],
>>> '영어': [88, 90, 70, 60, 50],
>>> '수학': [64, 62, None, 31, None],
>>> '과학': [None, 72, None, 70, 88]
>>> }
>>> df = DataFrame(source, index=['철수', '영희', '민수', '수현', '호영'])
>>> print(df) |
cs |
--> 결과
학년 | 성별 | 국어 | 영어 | 수학 | 과학 | |
철수 | 1 | 남자 | 98 | 88 | 64.0 | NaN |
영희 | 2 | 여자 | 88 | 90 | 62.0 | 72.0 |
민수 | 1 | 남자 | 92 | 70 | NaN | NaN |
수현 | 3 | 여자 | 63 | 60 | 31.0 | 70.0 |
호영 | 4 | 남자 | 120 | 50 | NaN | 88.0 |
4) 동일한 구조를 갖는 딕셔너리 들이 모인 리스트를 사용한 DataFrame 생성
- 딕셔너리의 key가 컬럼의 이름으로 사용되기 때문에 index만 추가적으로 생성
1
2
3
4
5
6
7
8
9
10
11 12 |
>>> source = [
>>> {'학년': 1, '성별': '남자', '국어': 98, '영어': 88, '수학': 64, '과학': None},
>>> {'학년': 2, '성별': '여자', '국어': 88, '영어': 90, '수학': 62, '과학': 72},
>>> {'학년': 1, '성별': '남자', '국어': 92, '영어': 70, '수학': None, '과학': None},
>>> {'학년': 3, '성별': '여자', '국어': 63, '영어': 60, '수학': 31, '과학': 70},
>>> {'학년': 4, '성별': '남자', '국어': 120, '영어': 50, '수학': None, '과학': 88}
>>> ]
>>>
>>> df = DataFrame(source, index=['철수', '영희', '민수', '수현', '호영']) >>> print(df) |
cs |
--> 결과
학년 | 성별 | 국어 | 영어 | 수학 | 과학 | |
철수 | 1 | 남자 | 98 | 88 | 64.0 | NaN |
영희 | 2 | 여자 | 88 | 90 | 62.0 | 72.0 |
민수 | 1 | 남자 | 92 | 70 | NaN | NaN |
수현 | 3 | 여자 | 63 | 60 | 31.0 | 70.0 |
호영 | 4 | 남자 | 120 | 50 | NaN | 88.0 |
5) CSV파일을 DataFrame으로 변환하기
1
|
>>> 객체 = read_csv(파일경로, encoding = 'ufr-8' or 'euc-kr')
|
cs |
- 외부에서 csv나 xlsx 파일을 가져오는 경우 index가 인식되지 않기 때문에 변환후 인덱스를 지정 해줘야함.
1
2 3 |
>>> df = read_csv('http://itpaper.co.kr/demo/py/grade.csv', encoding='euc-kr')
>>> df |
cs |
--> 결과
이름 | 학년 | 성별 | 국어 | 영어 | 수학 | 과학 | |
0 | 철수 | 1 | 남자 | 98 | NaN | 88.0 | 64.0 |
1 | 영희 | 2 | 여자 | 88 | 90.0 | 62.0 | 72.0 |
2 | 민수 | 1 | 남자 | 92 | 70.0 | NaN | NaN |
3 | 수현 | 3 | 여자 | 63 | 60.0 | 31.0 | 70.0 |
4 | 호영 | 4 | 남자 | 120 | 50.0 | NaN | 88.0 |
6) xlsx 파일을 통한 생성
- 엑셀파일을 객체 형태로 가져온다.
1
2
3
4
5
6
7
8
9
10
11
|
>>> xls = ExcelFile('http://itpaper.co.kr/demo/py/grade.xlsx')
>>> xls
# 엑셀파일의 sheet이름에 대한 리스트
>>> xls.sheet_names
['grade']
>>> df = xls.parse(xls.sheet_names[0])
>>> df
|
cs |
<실제 엑셀 파일>
--> 결과
이름 | 학년 | 성별 | 국어 | 영어 | 수학 | 과학 | |
0 | 철수 | 1 | 남자 | 98 | NaN | 88.0 | 64.0 |
1 | 영희 | 2 | 여자 | 88 | 90.0 | 62.0 | 72.0 |
2 | 민수 | 1 | 남자 | 92 | 70.0 | NaN | NaN |
3 | 수현 | 3 | 여자 | 63 | 60.0 | 31.0 | 70.0 |
4 | 호영 | 4 | 남자 | 120 | 50.0 | NaN | 80.0 |
'Python' 카테고리의 다른 글
Python (데이터 전처리 - 데이터검색, 행/열 추가) (0) | 2020.05.15 |
---|---|
Python (데이터 전처리 - 행/열 순서 및 이름 변경, 데이터 정렬) (1) | 2020.05.14 |
Python ( pandas ) (0) | 2020.05.14 |
Python (반복문) (0) | 2020.05.13 |
Python (조건문) (0) | 2020.05.13 |
댓글