본문 바로가기
Python

[파이썬 라이브러리] Numpy, Pandas 문법

by 얀나대장 2023. 3. 2.

분석할 수 있는 데이터 : table, DataFrame, 2차원 Array

  1. 열 : 변수, 요인, Features, X, input (독립변수) / 결과, Target, y, Lable, Output (종속변수)
  2. 행 : 분석단위, 샘플, 관측치, 데이터 건 수

Numpy

  • 리스트 : 값의 집합. 다른 타입의 데이터도 한꺼번에 저장 가능. 요소 변경, 추가, 제거가 용이
  • 그러나 수학적 계산이 느려서 대량의 데이터 처리 속도가 느리다 ㅜ
  • Numpy : Numerical Python의 준말. 빠른 계산 가능
a=np.array([1,2,3,4,5])

a         # [1 2 3 4 5]
type(a)   # numpy.ndarray
a.shape   # (5, )
a.ndim    # 1
a.dtype   # int32'
a[0]      # 1

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

a.shape   #(2,3,3)
  • 3차원 배열일 때

a.shape ⇒ (개수, 행, 열), (3,3) 행렬이 2개 있음.

 

reshape

행렬의 형태를 변환

a = np.array([[1, 2, 3], 
              [4, 5, 6]])

b = a.reshape(3, 2)

'''
[[1 2]
 [3 4]
 [5 6]]
'''
  • -1의 편리성

(m, -1) 또는 (-1, n) 처럼 사용해 행 또는 열 크기 한쪽만 지정할 수 있습니다.

print(a.reshape(2, -1)) #2행으로 열 크기 맞춰줘

[[1 2 3]
 [4 5 6]]
  • 함수와 method(attribute)

np.mean(a) : a가 리스트, 튜플 등을 일 때 사용 가능, numpy로 변환해서 계산한 다음 결과만 출력

a.mean() : a가 numpy array만 됨

 

  • 배열 조회(인덱스 조회)
print(a[[0, 1]]) #1,2번째 행 조회

[[1 2 3]
 [4 5 6]]

[값, 범위], [범위, 값]→ 1차원 예) a [:1]

[범위, 범위]→ 2차원 예)a [:,1:2]

[값, 값] → 원소만 예) print(a[[1,2], [1,2]])         #a [1,1]&a [2,2]

 

1) 배열 더하기

 

  • + 또는 np.add() 함수를 사용합니다.

# 배열 더하기 print(x + y) # 또는 print(np.add(x, y))

 

2) 배열 빼기

  • - 또는 np.subtract() 함수를 사용합니다.

# 배열 빼기 print(x - y) # 또는 print(np.subtract(x, y))

 

3) 배열 곱하기

  • * 또는 np.multiply() 함수를 사용합니다.

# 배열 곱하기 print(x * y) # 또는 print(np.multiply(x, y))

 

4) 배열 나누기

  • / 또는 np.divide() 함수를 사용합니다.

# 배열 나누기 print(x / y) # 또는 print(np.divide(x, y))

 

5) 배열 제곱

  • ** 또는 np.power() 함수를 사용합니다.

# 배열 y 제곱 print(x ** y) # 또는 print(np.power(x, y)) # 배열 제곱 print(x ** 2)

 

  • np.where(조건문, 참일 때 값, 거짓일 때 값)

a=np.array([1,2,3,4]), np.where(a>2,1,0)=[0,0,1,1]

 

  • argmax, argmin : 전체 중에서 가장 큰/작은 값의 인덱스

print(np.argmax(a))

열 기준 큰 값의 인덱스

print(np.argmax(a, axis = 0))

행 기준 큰 값의 인덱스

print(np.argmax(a, axis = 1))

 

Pandas

  • DataFrame이란? 관계형 데이터베이스의 테이블 또는 엑셀 시트와 같은 형태 (2차원 구조)
  • 열 이름 확인 list(data)⇒ 데이터프레임을 리스트 함수에 넣으면 열 이름이 리스트로 반환됨.
    • print(data.columns) print(data.columns.values) # np array 형태
  • 자료형 확인
    • int64: 정수형 데이터(int)
    • float64: 실수형 데이터(float)
    • object: 문자열 데이터(string)
  • 열 자료형, 값 개수 확인
    data.info()
  • 열 기준 정렬
    • data.sort_values(by=’column name’, ascending=True)
  • 복합 열 정렬
    • data.sort_values(by=['JobSatisfaction', 'MonthlyIncome'], ascending=[True, False])
      ⇒ 1번째로 Job 오름차순으로 보고 같으면 2번째로 Income 내림차순으로 정렬
  • 고윳값 확인
    • unique() 메서드로 고유값을 확인하며, 결과값은 배열 형태
      print(data ['MaritalStatus']. unique())⇒ ['Married' 'Single' 'Divorced']
  • 조건으로 조회(location)
    df.loc [조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회할 수 있습니다.
    우선 조건이 제대로 판단이 되는지 확인한 후 그 조건을 대 괄호 안에 넣으면 됩니다.
    예) data.loc [data ['DistanceFromHome'] > 10] 또는 data.loc [data ['DistanceFromHome'] > 10, 'DistanceFromHome'] ← 마지막에 열 이름 추가
  • isin(), between()
    • isin([값 1, 값 2,..., 값 n]) : 값 1 또는 값 2 또는... 값 n인 데이터만 조회합니다. *값은 리스트로
data.loc[data['JobSatisfaction'].isin([1,4])]

#직무 만족도가 1이거나 4인 사람만
  • between(시작값 1, 끝값 2) : 값 1 ~ 값 2까지 범위 안의 데이터만 조회합니다. *변하지 않으므로 튜플
data.loc[data['Age'].between(25, 30)]
#나이가 25~30인 사람

 

예제 1

1,2를 불만(unsat), 3,4를 만족(sat)으로 하는 새로운 변수 JobSat2를 추가하시오.

data['JobSat2']=np.where(data['JobSat'].isin([1,2]),'unsat','sat')
data.head()

 

 

열 삭제

  • 삭제 전에는 항상 copy본으로!!

1) 열 하나 삭제

  • drop() 메서드를 사용해 열을 삭제합니다.
  • axis=0: 행 삭제(기본 값)
  • axis=1: 열 삭제
  • inplace=True 옵션을 지정해야 실제로 반영이 됩니다.
    • False : 삭제한 것처럼 보여줘(조회!)

2) 여러 개 삭제

data2.drop(['JobSat2','Diff_Income'], axis=1, inplace=True)

값 변경

1) 열 전체 값 변경

data2['Income_LY'] = 0

2) 조건에 의한 값 변경

# Diff_Income 의 값이 1000보다 작은 경우, 0로 변경해 봅시다.
data2.loc[data2['Diff_Income'] < 1000, 'Diff_Income' ] = 0

# Age가 40보다 많으면 1, 아니면 0으로 바꿔 봅시다.
data2['Age'] = np.where(data2['Age'] > 40, 1, 0)

 

댓글