반응형
DataFrame?
- Pandas의 행렬과도 유사한 2D 데이터 객체, 하지만 개개 열의 자료형이 서로 일치하지 않을수도 있다.
- CSV 파일, 엑셀 파일, SQL 테이블 등의 형식의 데이터를 담기에 적합하여 해당 데이터를 불러올 수 있다.
- columns (열)과 index (행)의 속성이 있다.
- 각 열은 Series 데이터타입이다. 즉, Series 타입을 모아 하나의 객체로 만든 것이라고 할 수 있다.
데이터 프레임 생성 : csv
import pandas as pd
import numpy as np
import os
os.chdir(r"..\data")
df = pd.read_csv('data_studentlist_en.csv', header='infer',encoding = 'latin1')
print(df)
==결과==
NAME GENDER AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
3 David Hassel M 23 3 N AB 182.1 85.7
4 Clara Rodriquez F 20 1 Y A 168.0 49.5
5 Jennifer Lorentz F 21 2 N O 162.0 52.0
6 Susan Clark F 22 1 N O 155.2 45.3
7 Margareth Jones F 23 1 N A 176.9 55.0
8 John Bertsch M 23 3 N B 178.5 64.2
9 Jake Timmerman M 22 2 N B 176.1 61.3
10 Joshua Connor M 24 4 Y O 167.1 62.0
11 John Matsuda M 22 2 N AB 180.0 75.8
12 Eddy Johnson M 21 1 N A 162.2 55.3
13 Rebecah Anderson F 23 3 N O 176.1 53.1
14 Linda Carter F 22 2 N B 158.2 45.2
15 Richard Swayze M 24 4 Y B 168.6 70.2
16 Andrew Daley M 21 1 N A 169.2 62.2
- read_csv 함수를 사용해 csv 파일로부터 데이터를 받아왔다. (data_studentlist_en.csv)
- read_csv 파라미터 중 header는 파일 내부에 header가 포함되어 있는지 여부를 확인한다. 파일 내부에 col이름이 제대로 부여되어 있다면 'infer'를 입력한다.
- read_csv 파라미터 중 encoding은 문자 처리방법을 뜻하는데, 문자가 깨지지않도록 적절한 인코딩 방식을 선택해야 한다. 영어만으로 이루어진 데이터는 왠만해선 깨지지 않지만 한글이 섞인 경우 인코딩방식이 적절하지 않으면 깨진다.
- 데이터프레임은 numpy와 유사하게 shape, size, ndim 값을 보유하고 있다.
데이터 프레임 생성 : 엑셀
dfx = pd.read_excel('data_studentlist_en.xlsx', sheet_name='Sheet1')
print(dfx.head(5))
==결과==
name gender age grade absence bloodtype height weight
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
3 David Hassel M 23 3 N AB 182.1 85.7
4 Clara Rodriquez F 20 1 Y A 168.0 49.5
데이터 프레임 생성 : 딕셔너리, numpy배열
data = { 'NAME' : ['Jake', 'Jennifer', 'Paul', 'Andrew'], 'AGE': [24,21,25,19], 'GENDER':['M','F','M','M']}
df4 = pd.DataFrame(data)
print(df4)
==결과==
NAME AGE GENDER
0 Jake 24 M
1 Jennifer 21 F
2 Paul 25 M
3 Andrew 19 M
df5 = pd.DataFrame(np.random.rand(10,5), columns=['A','B','C','D','E'])
print(df5)
==결과==
A B C D E
0 0.106702 0.911029 0.388986 0.581598 0.651019
1 0.325734 0.119166 0.930721 0.465581 0.163212
2 0.129590 0.323682 0.865881 0.446479 0.811059
3 0.020945 0.234791 0.259962 0.467398 0.915858
4 0.294922 0.482267 0.308855 0.465347 0.891606
5 0.320381 0.771138 0.923869 0.659314 0.910071
6 0.521168 0.206045 0.353384 0.992611 0.077367
7 0.226788 0.676189 0.331822 0.186582 0.376329
8 0.878460 0.011057 0.917314 0.339951 0.021992
9 0.371885 0.017130 0.310011 0.472060 0.512745
데이터 프레임 출력
print(df.info())
==결과==
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 17 entries, 0 to 16
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 NAME 17 non-null object
1 GENDER 17 non-null object
2 AGE 17 non-null int64
3 GRADE 17 non-null int64
4 ABSENCE 17 non-null object
5 BLOODTYPE 17 non-null object
6 HEIGHT 17 non-null float64
7 WEIGHT 17 non-null float64
dtypes: float64(2), int64(2), object(4)
memory usage: 1.2+ KB
None
print(df.describe())
==결과==
AGE GRADE HEIGHT WEIGHT
count 17.000000 17.000000 17.000000 17.000000
mean 22.352941 2.294118 170.035294 61.064706
std 1.169464 1.104802 7.849756 11.851685
min 20.000000 1.000000 155.200000 45.200000
25% 22.000000 1.000000 165.300000 53.000000
50% 22.000000 2.000000 169.200000 61.300000
75% 23.000000 3.000000 176.100000 68.200000
max 24.000000 4.000000 182.100000 85.700000
print(df.head(3))
print(df.tail(3))
==결과==
NAME GENDER AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
NAME GENDER AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT
14 Linda Carter F 22 2 N B 158.2 45.2
15 Richard Swayze M 24 4 Y B 168.6 70.2
16 Andrew Daley M 21 1 N A 169.2 62.2
- info는 데이터의 현 정보를 요약해서 보여준다.
- describe는 데이터의 통계 정보를 요약해서 보여준다.
- head와 tail은 각각 상단과 하단을 잘라 보여준다.
데이터 프레임 컬럼이름 변경
df.columns = ['name', 'gender', 'age', 'grade', 'absence', 'bloodtype', 'height', 'weight']
print(df.head(3))
==결과==
name gender age grade absence bloodtype height weight
0 Jared Diamond M 23 3 Y O 165.3 68.2
1 Sarah O'Donnel F 22 2 N AB 170.1 53.0
2 Brian Martin M 24 4 N B 175.0 80.1
- colums 값을 수정하여 컬럼의 내용을 변경할 수 있다.
데이터 프레임 컬럼 삭제
df.drop(columns=['NAME','GENDER'], inplace=True)
==결과==
AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT
0 23 3 Y O 165.3 68.2
1 22 2 N AB 170.1 53.0
2 24 4 N B 175.0 80.1
3 23 3 N AB 182.1 85.7
4 20 1 Y A 168.0 49.5
5 21 2 N O 162.0 52.0
6 22 1 N O 155.2 45.3
7 23 1 N A 176.9 55.0
8 23 3 N B 178.5 64.2
9 22 2 N B 176.1 61.3
10 24 4 Y O 167.1 62.0
11 22 2 N AB 180.0 75.8
12 21 1 N A 162.2 55.3
13 23 3 N O 176.1 53.1
14 22 2 N B 158.2 45.2
15 24 4 Y B 168.6 70.2
16 21 1 N A 169.2 62.2
- drop 명령어는 컬럼을 삭제해준다. inplace를 true로 하면 항구적으로 df 자체에서 컬럼을 삭제한다.
- cf. index = [0, 1, 2] 등으로 명령어를 주면 행도 삭제가 가능하다.
데이터 프레임 컬럼 추가
df['BMI'] = 10000*df['WEIGHT']/df['HEIGHT']**2
print(df.iloc[0:5, 1:]) # 출력문의 일종
GENDER AGE GRADE ABSENCE BLOODTYPE HEIGHT WEIGHT BMI
0 M 23 3 Y O 165.3 68.2 24.959660
1 F 22 2 N AB 170.1 53.0 18.317544
2 M 24 4 N B 175.0 80.1 26.155102
3 M 23 3 N AB 182.1 85.7 25.844071
4 F 20 1 Y A 168.0 49.5 17.538265
- 위와 같은 방법으로 새로운 칼럼을 추가할 수도 있다.
파일로 출력
df.to_csv('data_mine.csv',index=False)
dfx.to_excel('data_studentlist_en2.xlsx',sheet_name='NewSheet',index=False)
- 현재 디렉토리에 파일을 저장한다.
- index값은 index를 포함하여 저장할지를 결정한다.
- 엑셀파일의 경우 sheet_name 파라미터에서 저장될 sheet도 결정한다.
- 위 예시엔 명시하지 않았지만, sep 옵션을 주면 저장 형식에서 각 컬럼 value별 구분 문자를 바꿀 수 있다. (default = ',')
반응형
'🛠 기타 > Data & AI' 카테고리의 다른 글
[파이썬] Pandas 기초 - DataFrame 결합 (0) | 2020.07.09 |
---|---|
[파이썬] Pandas 기초 - DataFrame 슬라이싱 (0) | 2020.07.09 |
[파이썬] Pandas 기초 - Series (0) | 2020.07.09 |
[파이썬] Matplotlib 패키지 (0) | 2020.07.09 |
[파이썬] Numpy 배열의 연산 (0) | 2020.07.09 |