본문 바로가기
Python

Python(DataFrame)

by 글로리. 2020. 5. 14.

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'남자'988864],
>>>     [2'여자'88906272],
>>>     [1'남자'9270, None, None],
>>>     [3'여자'63603170],
>>>     [4'남자'12050, 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 = {
>>>     '학년': [12134],
>>>     '성별': ['남자''여자''남자''여자''남자'],
>>>     '국어': [98889263120],
>>>     '영어': [8890706050],
>>>     '수학': [6462, None, 31, None],
>>>     '과학': [None, 72, None, 7088]
>>> }
 
>>> 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

 

DataFrame에 사용할 실제 csv 파일.

   --> 결과

  이름 학년 성별 국어 영어 수학 과학
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

 

  <실제 엑셀 파일>

DataFrame 생성에 사용할 실제 엑셀파일.

 

   --> 결과

  이름 학년 성별 국어 영어 수학 과학
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

댓글