이번에는 그냥 간단히 데이터를 확인하고 선택하는 방법에 대해서만 알아보겠습니다.
아마 외우는게 주가 될 것 같네요.
import pandas as pd
df = pd.read_excel('score.xlsx', index_col='지원번호')
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 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
- describe()
df.describe() #셀 수 있는 column
키 국어 영어 수학 과학 사회
count 8.000000 8.000000 8.000000 8.000000 8.000000 8.000000
mean 188.000000 62.500000 65.625000 66.250000 70.000000 60.625000
std 9.985704 29.519969 26.917533 30.325614 23.754699 32.120032
min 168.000000 15.000000 20.000000 10.000000 35.000000 10.000000
25% 186.250000 40.000000 53.750000 48.750000 51.250000 32.500000
50% 188.000000 67.500000 70.000000 70.000000 77.500000 77.500000
75% 191.750000 82.500000 85.000000 91.250000 87.500000 81.250000
max 202.000000 100.000000 100.000000 100.000000 95.000000 95.000000
이때, describe()에서는 셀 수 있는 column만 통계를 제시합니다. 이름이나, sw 특기 같은거는 제시하지 않습니다. 왜냐면 셀 수 없는 문자열로 이루어진 열이기 때문입니다.
describe에서 몇몇 인자가 있는데, 대표적으로 precentitles가 있습니다.
df.describe(percentiles=[.10, .40, .60, .95])
키 국어 영어 수학 과학 사회
count 8.000000 8.000000 8.000000 8.000000 8.000000 8.000000
mean 188.000000 62.500000 65.625000 66.250000 70.000000 60.625000
std 9.985704 29.519969 26.917533 30.325614 23.754699 32.120032
min 168.000000 15.000000 20.000000 10.000000 35.000000 10.000000
10% 179.200000 32.500000 30.500000 34.500000 38.500000 20.500000
40% 187.800000 52.000000 64.000000 66.000000 71.000000 67.000000
50% 188.000000 67.500000 70.000000 70.000000 77.500000 77.500000
60% 188.400000 80.000000 77.000000 74.000000 81.000000 80.000000
95% 200.250000 96.500000 94.750000 98.250000 95.000000 91.500000
max 202.000000 100.000000 100.000000 100.000000 95.000000 95.000000
이렇게 하시면 해당하는 %를 보여줍니다.
참고로 다른 정보 없이 %만 알고 싶으시면, describe함수 대신에 quantile를 쓰시면 됩니다.
quantile의 사용방법은 df.quantile([.10, .40, .60]) 이런 식으로 쓰시면 됩니다.
또한, describe()는 DataFrame이 아닌 Series에서도 쓸 수 있습니다.
df.국어.describe() #df['국어'].describe() 와 같음
count 8.000000
mean 62.500000
std 29.519969
min 15.000000
25% 40.000000
50% 67.500000
75% 82.500000
max 100.000000
Name: 국어, dtype: float64
이렇게 Series에서도 describe를 쓸 수 있습니다.
- info()
info는 DataFrame에서는 쓸 수 있지만, Series에서는 쓸 수 없습니다!
df.info()
class 'pandas.core.frame.DataFrame'>
Index: 8 entries, 1번 to 8번
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 8 non-null object
1 학교 8 non-null object
2 키 8 non-null int64
3 국어 8 non-null int64
4 영어 8 non-null int64
5 수학 8 non-null int64
6 과학 8 non-null int64
7 사회 8 non-null int64
8 SW특기 6 non-null object
dtypes: int64(6), object(3)
memory usage: 640.0+ bytes
이렇게 간략한 정보를 가지고 옵니다.
컬럼의 이름과, Non-Null의 갯수, 그리고 타입을 보여줍니다. 또한 밑에 타입의 갯수와 메모리를 몇 바이트 쓰고 있는지도 보여줍니다!
- dtypes
dtypes를 사용하면 해당하는 컬럼의 데이터 타입을 보여줍니다.
df.dtypes
이름 object
학교 object
키 int64
국어 int64
영어 int64
수학 int64
과학 int64
사회 int64
SW특기 object
dtype: object
- head, tail
head() 함수는 default 값으로 처음 5개의 행을 가지고 옵니다. head(n) 처럼 n에 숫자를 넣으시면 n개의 행을 가지고 옵니다.
df.head() #처음 5개
이름 학교 키 국어 영어 수학 과학 사회 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 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
df.head(7) #처음 7개
이름 학교 키 국어 영어 수학 과학 사회 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 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
head가 처음을 가져오는 함수라면 tail은 마지막에서부터 가져오는 함수입니다.
head와 마찬가지로 안에 숫자를 넣으면 그 갯수만큼 가져옵니다.
df.tail() #마지막 5개
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
df.tail(7) #마지막 7개
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
2번 정대만 북산고 184 40 35 50 55 25 Java
3번 송태섭 북산고 168 80 75 70 80 75 Javascript
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
- values, index, columns, shape
values는 값들을 보여줍니다.
index는 index의 값들을 보여줍니다.
columns는 열의 이름을 보여줍니다.
shape는 행과 열의 갯수를 보여줍니다. 이때, 열의 갯수에서 index는 제외합니다.
df.values
array([['채치수', '북산고', 197, 90, 85, 100, 95, 85, 'Python'],
['정대만', '북산고', 184, 40, 35, 50, 55, 25, 'Java'],
['송태섭', '북산고', 168, 80, 75, 70, 80, 75, 'Javascript'],
['서태웅', '북산고', 187, 40, 60, 70, 75, 80, nan],
['강백호', '북산고', 188, 15, 20, 10, 35, 10, nan],
['변덕규', '능남고', 202, 80, 100, 95, 85, 80, 'C'],
['황태산', '능남고', 188, 55, 65, 45, 40, 35, 'PYTHON'],
['윤대협', '능남고', 190, 100, 85, 90, 95, 95, 'C#']], dtype=object)
df.index
Index(['1번', '2번', '3번', '4번', '5번', '6번', '7번', '8번'], dtype='object', name='지원번호')
df.columns
Index(['이름', '학교', '키', '국어', '영어', '수학', '과학', '사회', 'SW특기'], dtype='object')
df.shape #row, column 갯수 column은 index제외
(8, 9)
- Series 값들의 확인(describe(), min(), max(), nlargest(), nsmallest(), mean(), sum(), count(), unique(), nunique())
키를 예시로 들겠습니다. (df.키)
describe는 앞에서 설명해서 괜찮을 것 같습니다.
min()은 해당 열의 가장 작은 값을 리턴합니다.
max()는 해당 열의 가장 큰 값을 리턴합니다.
nlargest(num)는 해당 열의 가장 큰 num개의 값을 리턴합니다.
nsmallest(num)은 해당 열의 가장 작은 num개의 값을 리턴합니다.
mean()은 해당 열의 평균 값을 리턴합니다.
sum()은 해당 열의 합을 리턴합니다.
count()는 해당 열에 몇 개의 값이 있는지 리턴합니다.
unique()는 해당 열에 중복된 값을 제외하고 열의 값을 리턴합니다.
nunique()는 해당 열에 중복된 값을 제외하고 남은 열의 갯수를 리턴합니다.
df['키'].['1번']을 하면 1번의 키가 나옵니다. 이는 df.키['1번']으로도 가능합니다.
df.키.min()
>>> 168
df.키.max()
>>> 202
df['키'].nlargest(3)
지원번호
6번 202
1번 197
8번 190
Name: 키, dtype: int64
df['키'].nsmallest(3)
지원번호
3번 168
2번 184
4번 187
Name: 키, dtype: int64
df['키'].mean()
>>> 188.0
df['키'].sum()
>>> 1504
df['SW특기'].count()
>>> 6
df['학교'].unique() #중복된 애들 제거
>>> array(['북산고', '능남고'], dtype=object)
df['학교'].nunique()
>>> 2
df['키']['1번']
>>> 197
df.키['1번']
>>> 197
- 데이터의 선택
df.columns를 하면 열의 이름들이 나옵니다.
이때, df.columns[0]을 하면 뭐가 나올까요?
df.columns[0]
>>> '이름'
이렇게 column의 맨 첫 번째 요소가 나옵니다.
그리고 저희가 df['이름']을 하면 '이름'에 해당하는 열의 원소가 나오잖아요?
위의 columns를 이용하시면, 열의 위치에 따라서 열을 출력할 수도 있습니다.
df[df.columns[0]] #df['이름']과 같은 것임
지원번호
1번 채치수
2번 정대만
3번 송태섭
4번 서태웅
5번 강백호
6번 변덕규
7번 황태산
8번 윤대협
Name: 이름, dtype: object
df.columns[0] = '이름'이기 때문입니다.
그러면 마찬가지로 columns에 인덱스를 넣어서 값을 확인할 수 있다면 이런 것도 가능할 것 같습니다.
df[df.columns[-1]]
지원번호
1번 Python
2번 Java
3번 Javascript
4번 NaN
5번 NaN
6번 C
7번 PYTHON
8번 C#
Name: SW특기, dtype: object
이렇게 -1로 참조 할 수도 있고,
df[df.columns[:2]]
이름 학교
지원번호
1번 채치수 북산고
2번 정대만 북산고
3번 송태섭 북산고
4번 서태웅 북산고
5번 강백호 북산고
6번 변덕규 능남고
7번 황태산 능남고
8번 윤대협 능남고
이렇게 슬라이싱을 통해서도 참조할 수 있습니다.
- 데이터 선택(슬라이싱)
영어 성적에서 0~4번째까지의 데이터를 가져오고 싶다면 이렇게 쓰면 될 것 같습니다.
df['영어'][0:5] #0~4번째까지의 데이터
지원번호
1번 85
2번 35
3번 75
4번 60
5번 20
Name: 영어, dtype: int64
참고로 for문도 가능합니다.
for score in df.영어:
print(score)
85
35
75
60
20
100
65
85
이렇게 여러 개의 열도 가져올 수 있습니다.
df[['이름', '키']][:3]
이름 키
지원번호
1번 채치수 197
2번 정대만 184
3번 송태섭 168
이런식으로 df에서 몇몇 행만 가져올 수도 있습니다.
df[3:]
이름 학교 키 국어 영어 수학 과학 사회 SW특기
지원번호
4번 서태웅 북산고 187 40 60 70 75 80 NaN
5번 강백호 북산고 188 15 20 10 35 10 NaN
6번 변덕규 능남고 202 80 100 95 85 80 C
7번 황태산 능남고 188 55 65 45 40 35 PYTHON
8번 윤대협 능남고 190 100 85 90 95 95 C#
당연히 이 모든 것들은 for문이 가능하구요
for height in df[df.columns[2]][:3]:
print(height)
197
184
168
이렇게 키의 값에서 상위 세 개만 for문으로 프린트 했습니다.
여러가지 방법으로 응용할 수 있다는 점 항상 기억해야할 것 같습니다.
1. 요약
어지간하면 자주봐서 눈에 익혀야겠네요....
참고 : 나도코딩
'Python Library > Pandas' 카테고리의 다른 글
[Pandas - Python] Pandas 라이브러리와 데이터 검색(조건) (0) | 2022.02.07 |
---|---|
[Pandas - Python] Pandas 라이브러리와 데이터의 선택(loc, iloc) (0) | 2022.02.07 |
[Pandas - Python] Pandas 라이브러리와 파일 저장 및 열기(excel, csv, txt) (0) | 2022.02.05 |
[Pandas - Python] Pandas 라이브러리와 Index 정리 (0) | 2022.02.04 |
[Pandas] Pandas 라이브러리와 DataFrame (0) | 2022.02.04 |