pandas : 행과 열로 이루어진 2차원 데이터를 효율적으로 가공/처리할 수 있는 기능 제공

 

1. Pandas 객체

(1) Series

  - 인덱스와 컬럼 하나로 이루어진 데이터 구조체

 

(2) DataFrame

  - 칼럼이 여러개인 데이터 구조체

  * Series가 여러개 모인 것

2. DataFrame 생성

import pandas as pd

df = pd.DataFrame([['a','b','c'],
                   ['d','e','f'],
                   ['g','h','i']], columns=[1,2,3], index=list('012'))
                   
print(df)

- columns와 index는 리스트의 형태로 전달하며 지정하지 않으면 자동으로 생성해준다

결과 화면

# DataFrame 정보 읽기
print(df.shape)  # 행과 열의 크기
print(df.info())  # 총 데이터 수와 데이터 타입, null의 개수를 알려줌
print(df.describe())  # 데이터 분포도 확인

결과 화면

# 값 확인하기
print(df.value_counts()) # 데이터의 분포도
print(df.head())  # 데이터를 위에서부터 5행 출력
print(df.head(1)) # 데이터 맨 위

결과 화면

 

(1) 딕셔너리를 이용한 DataFrame 생성

dict = {'이름':['홍길동','전우치','임꺽정'],
        '나이':[30, 20, 40],
        '성별':['남','남','남']}

df = pd.DataFrame(dict)

결과 화면

 

 

3. DataFrame 수정/삭제

dict = {'이름':['홍길동','전우치','임꺽정'],
        '나이':[30, 20, 40],
        '성별':['남','남','남']}

df = pd.DataFrame(dict)

# 데이터 수정
df['나이'] = 0

결과 화면

dict = {'이름':['홍길동','전우치','임꺽정'],
        '나이':[30, 20, 40],
        '성별':['남','남','남']}

df = pd.DataFrame(dict)

# 데이터 삭제
df = df.drop('성별', axis=1)

결과 화면

 

4. DataFrame 데이터 셀렉션 및 필터링

(1) [ '컬럼명' ] 

df = pd.DataFrame([['a','b','c'],
                   ['d','e','f'],
                   ['g','h','i']], columns=['A','B','C'], index=list('xyz'))
               
print(df['A'])
print(df[df > 'd'])

결과 화면

 

(2) iloc[ '행번호', '열번호' ], loc[ 'index명', 'column명' ]

df = pd.DataFrame([['a','b','c'],
                   ['d','e','f'],
                   ['g','h','i']], columns=['A','B','C'], index=list('xyz'))
# iloc[]
print(df.iloc[0])  # 0번째 행
print(df.iloc[1,0])  # 1번째 행 0번째 열
print(df.iloc[0:2,1:3])  # 0번째부터 1번째 행, 1번째부터 2번째열

결과 화면

# loc[ ]
print(df.loc['x'])  # 'x' 행
print(df.loc['y','B'])  # 'y'행, 'B'열
print(df.loc['x':'y','A':'C'])  # 'x'부터'y'행, 'A'부터'C'열

결과 화면

 

 

5. DataFrame 정렬, Aggregation, GroupBy 

(1) 정렬

df = pd.DataFrame([[3,2,4],
                   [1,5,9],
                   [6,8,7]], columns=list('abc'), index=list('ABC'))
                   
# by=['컬럼명']
# 오름차순 정렬
print(df.sort_values(by=['a'])) 

# 내림차순 정렬 ascending=False 값 입력
print(df.sort_values(by=['a'], ascending=False))

결과 화면

 

(2) Aggregation 함수

df = pd.DataFrame([[3,2,4],
                   [1,5,9],
                   [6,8,7]], columns=list('abc'), index=list('ABC'))

# min(), max()
print(df.min())
print(df.max())

# print
#----------df.min()----------
# a    1
# b    2
# c    4
# dtype: int64

#----------df.max()----------
# a    6
# b    8
# c    9
# dtype: int64
# count()
print(df.count())

# print
#----------df.count()----------
# a    3
# b    3
# c    3
# dtype: int64
# mean() 
print(df.mean())

# print
#----------df.mean()----------
# a    3.333333
# b    5.000000
# c    6.666667
# dtype: float64

 

(3) .apply() 사용자 정의 함수

df = pd.DataFrame([[3,2,4],
                   [1,5,9],
                   [6,8,7]], columns=list('abc'), index=list('ABC'))

df_apply = df.apply(lambda x : x*2)

# print
#     a   b   c
# A   6   4   8
# B   2  10  18
# C  12  16  14

 

(4) groupby()

by 파라미터에 적은 컬럼을 기준으로 그룹화

df = pd.DataFrame({'학년':[1,1,2,3,2,1],
                  '반':[5,2,2,3,3,5],
                  '이름':['짱구','철수','유리','맹구','훈이','수지']})

# groupby()
df_group = df.groupby(by='학년')

# 그룹화한 객체에 Aggregation 함수 적용
display(df_group.count())

결과 화면

 

  - .agg() : 여러개의 Aggregation함수를 적용할 때 사용할 수 있다

df = pd.DataFrame({'학년':['1학년','2학년','1학년','2학년'],
                  '반':['1반','2반','1반','2반'],
                  '국어':[80, 90, 100, 70],
                  '수학':[70, 55, 60, 100],
                  '영어':[88, 65, 95, 77]}, index=['1반','2반','3반','4반'])

df_group = df.groupby(by='학년')

# 여러개의 함수를 작성할 때는 리스트의 형태로 전달
print(df_group.agg(['sum','mean']))

#          국어         수학         영어      
#       sum  mean | sum  mean | sum  mean
# 학년                                  
# 1학년  180  90.0 | 130  65.0 | 183  91.5
# 2학년  160  80.0 | 155  77.5 | 142  71.0

 

 

6. concat()

 

7. merge()

 

8. join()

'수업정리 > PYTHON' 카테고리의 다른 글

import Numpy  (0) 2023.06.01

Numpy 

: 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 대표적인 패키지

 

1. ndarray

(1) np.array()

array() 함수를 이용해 리스트를 ndarray로 만들 수 있다

import numpy as np

array1 = np.array([1,2,3])
print(type(array1)) # <class 'numpy.ndarray'>

array1은 1차원으로 3개의 데이터로 이루어진 배열로 array1.shape 를 통해 배열의 크기를 알 수 있다

print(array1.shape)  # (3, )
array2 = np.array([[1,2,3],[4,5,6]])
print(array2.shape)  # (2,3) 2행 3열의 배열

 

배열의 차원을 확인할때는 .ndim을 통해 확인할 수 있다

print(array1.ndim)  # 1
print(array2.ndim)  # 2

 

ndarray에 들어가는 데이터값은 숫자, 문자 모두 가능하며 하나의 데이터 유형만을 가진다

만약 정수와 실수가 섞여있거나 숫자와 문자가 섞여있는 리스트를 ndarray로 변경하면 데이터 유형이 크기가 더 큰 데이터 유형으로 일괄 적용된다  ( int + float -> float,  int + string -> string)

ndarray의 데이터 타입 확인 .dtype

print(array1.dtype)  # int32

데이터 타입 변경 .astype('변경하고자 하는 타입')

array1_float = array1.astype('float64')  
print(array1_float)  # [1. 2. 3.]

array3 = np.array([1.2, 2.4, 4.5])
array3_int = array3.astype('int32')
print(array3_int)  # [1 2 4]

 

(2) np.arange()

np.arange(시작숫자, 마지막 숫자 +1, 건너뛸 횟수)

a = np.arange(10)
print(a)  # [0 1 2 3 4 5 6 7 8 9]

b = np.arange(3,10)
print(b)  # [3 4 5 6 7 8 9]

c = np.arange(1,10,2)
print(c)  # [1 3 5 7 9]

 

(3) np.zeros()

np.zeros((크기), dtype='데이터 형태 default=float64')

a = np.zeros((3,2))
print(a)
# [[0. 0.]
#  [0. 0.]
#  [0. 0.]]

b = np.zeros((2,3), dtype='int32')
print(b)
# [[0 0 0]
#  [0 0 0]]

 

(4) np.ones()

np.ones((크기), dtype='데이터 형태 default=float64')

a = np.ones((3,2))
print(a)
# [[1. 1.]
#  [1. 1.]
#  [1. 1.]]

b = np.zeros((2,3), dtype='int32')
print(b)
# [[1 1 1]
#  [1 1 1]]

 

(5) np.reshape

: 차원과 크기를 변경해준다

데이터의 개수가 변경하고자 하는 차원의 데이터 수와 같지 않다면 변경할 수 없다.

 

행 또는 열에 -1값을 넣어주면 호환되는 차원과 크기로 변경해준다

a = np.arange(10)
print(a) 
# [0 1 2 3 4 5 6 7 8 9]

b = a.reshape(2,5)
print(b)
# [[0 1 2 3 4]
#  [5 6 7 8 9]]

c = a.reshape(-1,2)
print(c)
# [[0 1]
#  [2 3]
#  [4 5]
#  [6 7]
#  [8 9]]

 

 

2. 인덱싱

: 특정 데이터만 선택

 

(1) 단일 값 추출

array1 = np.array([[1,2],
                   [3,4]])  # (2,2) 다차원 배열

print(array1[0])  # array1의 0번째 행 [1 2]
print(array1[1,0])  # array1의 1행 0열 3

 

(2) 슬라이싱 (연속 값 추출)

array1 = np.array([[1,2,3],
                   [4,5,6],
                   [7,8,9]])

print(array1[0:2])  
# [[1 2 3]
#  [4 5 6]]  0행부터 1행까지

print(array1[:,1])  # [2 5 8]  모든행에서 1열
print(array1[1:3, 1:3])  
# [[5 6]
#  [8 9]]  1행부터 2열, 1열부터 2열까지

 

(3) 불린 인덱싱

: 조건에 맞는 데이터인지 아닌지 True, False로 출력

array1 = np.array([[1,2,3],
                   [4,5,6],
                   [7,8,9]])
                   
print(array1 > 5)  
# [[False False False]
# [False False  True]
# [ True  True  True]]
print(array1[array1 > 5])  # [6 7 8 9]

 

 

3. 행렬 정렬

(1) sort() 

array1 = np.array([5,1,4,3,9])

# np.sort() 기존 행렬을 유지한 채 정렬
print(np.sort(array1))  # [1 3 4 5 9]
print(array1)           # [5 1 4 3 9]


array2 = np.array([6,7,3,1])

# ndarray.sort() 기존 행렬을 정렬
print(array2.sort())    # None
print(array2)           # [1 3 6 7]

행렬이 2차원 이상일 경우 axis 축 값을 설정하여 정렬할 수 있다

array1 = np.array([[6, 8],
                   [5, 1]])
                   
print(np.sort(array1, axis=0)) 
# [[5 1]
#  [6 8]] 행 기준으로 정렬
print(np.sort(array1, axis=1))  
# [[6 8]
#  [1 5]] 열 기준으로 정렬

 

(2) argsort()

정렬된 행렬의 인덱스 값을 반환해준다

array1 = np.array([[6, 8, 5, 1]])
                   
print(np.argsort(array1))  # [[3 2 0 1]]

'수업정리 > PYTHON' 카테고리의 다른 글

import pandas  (0) 2023.06.02

+ Recent posts