Python Library/Pandas

[Pandas - Python] Pandas 라이브러리와 데이터 확인 및 선택(기본)

바보1 2022. 2. 5. 22:58

이번에는 그냥 간단히 데이터를 확인하고 선택하는 방법에 대해서만 알아보겠습니다.

 

아마 외우는게 주가 될 것 같네요.

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. 요약

 

어지간하면 자주봐서 눈에 익혀야겠네요....

 

 

참고 : 나도코딩