본문 바로가기
Naver Clould with BitCamp/Aartificial Intelligence

Pandas pkg and Numpy pkg

by HJ0216 2023. 1. 23.

기본 환경: IDE: VS code, Language: Python

 

1. Pandas

 1.1. Series

: 1차원 배열의 값(values)에 대응되는 인덱스(index)를 부여할 수 있는 구조

: index와 value로 구성된 자료구조

# pandas_basic.py

import pandas as pd


# Series
sr = pd.Series([1000, 2000, 3000, 4000],
               index=["일천원", "이천원", "삼천원", "사천원"])
print(sr)
'''
일천원    1000
이천원    2000
삼천원    3000
사천원    4000
dtype: int64
'''
print(format(sr.index)) # Index(['일천원', '이천원', '삼천원', '사천원'], dtype='object')
print(format(sr.values)) # [1000 2000 3000 4000]

 

 1.2. ⭐ DataFrame

: 행과 열을 가지는 자료구조로, col, index, value로 구성됨

# pandas_basic.py

import pandas as pd


# dataFrame
values = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
index = ['one', 'two', 'three']
columns = ['A', 'B', 'C']

df = pd.DataFrame(values, index=index, columns=columns)
print(df)
'''
       A  B  C
one    1  2  3
two    4  5  6
three  7  8  9
'''
print(format(df.index)) # Index(['one', 'two', 'three'], dtype='object')
print(format(df.columns)) # Index(['A', 'B', 'C'], dtype='object')
print(format(df.values)) # [[1 2 3] [4 5 6] [7 8 9]]

# dataFrame using list
list_data = [
    ['1000', 'Steve', 90.72], 
    ['1001', 'James', 78.09], 
    ['1002', 'Doyeon', 98.43], 
    ['1003', 'Jane', 64.19], 
    ['1004', 'Pilwoong', 81.30],
    ['1005', 'Tony', 99.14],
]
df2 = pd.DataFrame(list_data)
print(df2)
'''
      0         1      2
0  1000     Steve  90.72
1  1001     James  78.09
2  1002    Doyeon  98.43
3  1003      Jane  64.19
4  1004  Pilwoong  81.30
5  1005      Tony  99.14
'''
df2 = pd.DataFrame(list_data, columns=['학번', '이름', '점수']) # col_name 부여
print(df2)
'''
   학번      이름    점수
0  1000     Steve  90.72
1  1001     James  78.09
2  1002    Doyeon  98.43
3  1003      Jane  64.19
4  1004  Pilwoong  81.30
5  1005      Tony  99.14
'''
df2.index=["영", "일", "이", "삼", "사", "오"] # idx_name 부여
print(df2)
'''
     학번     이름    점수
영  1000     Steve  90.72
일  1001     James  78.09
이  1002    Doyeon  98.43
삼  1003      Jane  64.19
사  1004  Pilwoong  81.30
오  1005      Tony  99.14
'''

# dataFrame using dictionary(key-value)
dic_data = {
    '학번' : ['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름' : [ 'Steve', 'James', 'Doyeon', 'Jane', 'Pilwoong', 'Tony'],
    '점수': [90.72, 78.09, 98.43, 64.19, 81.30, 99.14]
    }

df3 = pd.DataFrame(dic_data)
print(df3)
'''
   학번      이름   점수
0  1000     Steve  90.72
1  1001     James  78.09
2  1002    Doyeon  98.43
3  1003      Jane  64.19
4  1004  Pilwoong  81.30
5  1005      Tony  99.14
'''

 

 1.3. Panel

: 다차원 데이터 구조

: 현재 pandas에서 지원하지 않음


2. Numpy

 2.1.  numpy.ndarray()

:N-dimensional array, 다차원 배열의 자료구조

# numpy_basic.py

import numpy as np


# 1차원 배열
vec = np.array([1, 2, 3, 4, 5])
print(vec) # [1 2 3 4 5]

# 2차원 배열
mat = np.array([[10, 20, 30], [60, 70, 80]]) 
print(mat) # [[10 20 30] [60 70 80]]

 

 2.2. numpy.arrange(i, j, k)

: i부터 j-1까지 k씩 증가하는 배열 생성

# numpy_basic.py

import numpy as np


# np.arange(i, j, k): i부터 j-1까지 k씩 증가하는 배열 생성
n = 2
range_n_step_vec = np.arange(1, 10, n)
print(range_n_step_vec) # [1 3 5 7 9]

 

 2.3. numpy.reshape()

: 내부 데이터 변경없이 배열의 구조 변경

# numpy_basic.py

import numpy as np


# np.reshape(): 내부 데이터 변경없이 배열의 구조 변경
originshape_mat = np.array(np.arange(30))
print(originshape_mat) # [0 1 2 ... 28 29]
reshape_mat = np.array(np.arange(30)).reshape((5,6))
print(reshape_mat)
'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]]
'''

 

 2.4. numpy slicing

: 특정 행이나 열들의 원소들에 접근할 수 있음

# numpy_basic.py

import numpy as np


# numpy slicing
mat2 = np.array([[1, 2, 3], [4, 5, 6]])
print(mat2) # [[1, 2, 3] [4, 5, 6]]
# 첫번째 행 출력
slicing_mat = mat[0, :]
print(slicing_mat) # [1 2 3]
# 두번째 열 출력
slicing_mat = mat[:, 1]
print(slicing_mat) # [2 5]

 

 2.5. numpy indexing

: 슬라이싱을 사용할 경우, 연속적이지 않은 원소들을 추출할 수 없음

: 인덱싱을 사용하여, 연속적이지 않은 원소들을 추출하여 배열을 생성

# numpy_basic.py

import numpy as np


# numpy indexing
mat3 = np.array([[1, 2], [4, 5], [7, 8]])
print(mat3) # [[1, 2] [4, 5] [7, 8]]
# 특정 위치 원소 1개 반환
print(mat3[1, 0]) # 4
# 특정 위치 원소 2개 반환 -> 배열 생성
indexing_mat = mat3[[2, 1],[0, 1]] # mat3[[2행, 1행], [0열, 1열]]
print(indexing_mat) # [7 5]

 

 

 

소스 코드

🔗 HJ0216/TIL

 

참고 자료

📑 01-04 판다스(Pandas) and 넘파이(Numpy) and 맷플롭립(Matplotlib)

📑 [Python] 10. Pandas - DataFrame