59doit

[Python-Pandas] #1 본문

Programming/Python(파이썬)

[Python-Pandas] #1

yul_S2 2022. 11. 7. 09:15
반응형
import pandas as pd

 

  • Series, DataFrame 를 로컬 네임스페이스로 import
from pandas import Series, DataFrame

 

 

  • 설정
import numpy as np
np.random.seed(12345)
import matplotlib.pyplot as plt
plt.rc('figure', figsize=(10, 6))
PREVIOUS_MAX_ROWS = pd.options.display.max_rows
pd.options.display.max_rows = 20
np.set_printoptions(precision=4, suppress=True)
pd.options.display.max_rows = PREVIOUS_MAX_ROWS

 

 

다중인덱스 사용가능

obj = pd.Series([4,7,-8,3])
obj    

# <출력> 
# 0    4
# 1    7
# 2   -8
# 3    3
# dtype: int64

왼쪽은 인덱스 번호가 된다.

 

 

 

 

인덱스 명 설정하기

obj2 = pd.Series([4,7,-8,3], index = ['d','b','a','c'])

obj2
# <출력> 
# d    4
# b    7
# a   -8
# c    3
# dtype: int64

obj2.index 
# <출력> Index(['d', 'b', 'a', 'c'], dtype='object')

 

 

 

 

색인으로 라벨 사용가능

# <obj2>
# d    4
# b    7
# a   -8
# c    3

obj2['a']   
# <출력> -8

 

 

인덱스명 색인으로 변경가능

obj2['d'] = 6          # d를 6으로 변경
obj2[['c','a','d']]    # c,a,d 에 해당하는 데이터 값만 볼 수 있음
# <출력>
# c    3
# a   -8
# d    6
# dtype: int64

 

 

Error

obj2['c','a','d']
# <출력> KeyError: 'key of type tuple not found and not a MultiIndex'

리스트로 묶어줘야한다.

 

 

 

 

요소 연산

ex) 각 요소에 *2

obj2*2
# <출력> 
# d    12
# b    14
# a   -16
# c     6
# dtype: int64

 

 

객체 안에 요소가 있는지 확인 (True / False)

'b' in obj2    # <출력> True
'e' in obj2    # <출력> False

 

 

 

dic의 key 값이 인덱스 역할

sdata = {'ohio':35000,'texas':71000, 'oregon':16000, 'utah':5000}
obj3 = pd.Series(sdata)
obj3
# <출력>
# ohio      35000
# texas     71000
# oregon    16000
# utah       5000
# dtype: int64

 

 

 

 

인덱스 설정, 해당하는 데이터만 불러옴, 없는값에는 NaN

# <obj3>
# ohio      35000
# texas     71000
# oregon    16000
# utah       5000

states = ['california','ohio','oregon','texas']
obj4 = pd.Series(sdata, index=states)            #states 의 인덱스를 사용하겠다

obj4
# <출력>
# obj4
# california        NaN
# ohio          35000.0
# oregon        16000.0
# texas         71000.0

'utah'는 states 에 포함되어 있지 않으므로 실행 결과에서 빠진다

 

 

isnull notnull 누락된 데이터 찾기

pd.isnull(obj4)
# <출력>
# california     True
# ohio          False
# oregon        False
# texas         False
# dtype: bool

pd.notnull(obj4)
# <출력>
# california    False
# ohio           True
# oregon         True
# texas          True
# dtype: bool

obj4.isnull()
# <출력>
# california     True
# ohio          False
# oregon        False
# texas         False
# dtype: bool

 

 

join  합집합

obj3
# <출력>
# ohio      35000
# texas     71000
# oregon    16000
# utah       5000
# dtype: int64

obj4
# <출력>
# california        NaN
# ohio          35000.0
# oregon        16000.0
# texas         71000.0
# dtype: float64

obj3 + obj4
# <출력>
# california         NaN
# ohio           70000.0
# oregon         32000.0
# texas         142000.0
# utah               NaN
# dtype: float64

 

 

데이터의 컬럼명,인덱스명 설정

obj4.name = 'population'
obj4.index.name = 'state'

obj4
# <출력> 
# state
# california        NaN
# ohio          35000.0
# oregon        16000.0
# texas         71000.0
# Name: population, dtype: float64

 

인덱스 색인을 대입하여 변경가능

# <obj>
# 0    4
# 1    7
# 2   -8
# 3    3

obj.index = ['Bob','Steve','Jeff','Ryan']
obj
# <출력>
# Bob      4
# Steve    7
# Jeff    -8
# Ryan     3
# dtype: int64

#새로운 데이터 들어오면 덮어씌어짐
obj.index = ['B','S','J','R']   
obj
# <출력>
# B    4
# S    7
# J   -8
# R    3
# dtype: int64

 

 

 

DataFrame

# 로우 컬럼에 대한 인덱스를 가진다
# 기본적으로 2차원이다
# 계층적 색인 == 색인이 여러개이다 라는 뜻이다

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
          'year': [2000, 2001, 2002, 2001, 2002, 2003],
          'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
frame = pd.DataFrame(data)

 

head 메서드 : 기본적으로 처음 5개의 로우만 출력한다

frame.head()
# <출력>
#     state  year  pop
# 0    Ohio  2000  1.5
# 1    Ohio  2001  1.7
# 2    Ohio  2002  3.6
# 3  Nevada  2001  2.4
# 4  Nevada  2002  2.9

 

컬럼명 설정

pd.DataFrame(data, columns=['year','stat','pop'])
# <출력>
#    year stat  pop
# 0  2000  NaN  1.5
# 1  2001  NaN  1.7
# 2  2002  NaN  3.6
# 3  2001  NaN  2.4
# 4  2002  NaN  2.9
# 5  2003  NaN  3.2

 

없는 값인 컬럼명에  => NaN 입력됨

frame2 = pd.DataFrame(data, columns = ['year','state','pop','debt'],
                      index=['one','two','three','four','five','six'])

frame2
# <출력>
#        year   state  pop debt
# one    2000    Ohio  1.5  NaN
# two    2001    Ohio  1.7  NaN
# three  2002    Ohio  3.6  NaN
# four   2001  Nevada  2.4  NaN
# five   2002  Nevada  2.9  NaN
# six    2003  Nevada  3.2  NaN

frame2.columns
# <출력> Index(['year', 'state', 'pop', 'debt'], dtype='object')

 

 

프레임 특정 컬럼 불러오기

frame2['state']
# <출력>
# one        Ohio
# two        Ohio
# three      Ohio
# four     Nevada
# five     Nevada
# six      Nevada
# Name: state, dtype: object

frame2.year
# <출력>
# one      2000
# two      2001
# three    2002
# four     2001
# five     2002
# six      2003
# Name: year, dtype: int64

 

 

프레임 특정 인덱스 불러오기

frame2.loc['three']  
# <출력>
# year     2002
# state    Ohio
# pop       3.6
# debt      NaN
# Name: three, dtype: object

인덱스 three에 해당하는 값을 출력

 

 

컬럼명에 데이터 넣기 -> 컬럼명이 전부다 바뀐다

# <frame2>
#        year   state  pop debt
# one    2000    Ohio  1.5  NaN
# two    2001    Ohio  1.7  NaN
# three  2002    Ohio  3.6  NaN
# four   2001  Nevada  2.4  NaN
# five   2002  Nevada  2.9  NaN
# six    2003  Nevada  3.2  NaN

frame2['debt'] = 16.5
frame2
# <출력>
#        year   state  pop  debt
# one    2000    Ohio  1.5  16.5
# two    2001    Ohio  1.7  16.5
# three  2002    Ohio  3.6  16.5
# four   2001  Nevada  2.4  16.5
# five   2002  Nevada  2.9  16.5
# six    2003  Nevada  3.2  16.5

컬럼명에 순차적데이터 넣기 

# <frame2>
#        year   state  pop debt
# one    2000    Ohio  1.5  NaN
# two    2001    Ohio  1.7  NaN
# three  2002    Ohio  3.6  NaN
# four   2001  Nevada  2.4  NaN
# five   2002  Nevada  2.9  NaN
# six    2003  Nevada  3.2  NaN

frame2['debt']=np.arange(6.)
frame2
# <출력>
#        year   state  pop  debt
# one    2000    Ohio  1.5   0.0
# two    2001    Ohio  1.7   1.0
# three  2002    Ohio  3.6   2.0
# four   2001  Nevada  2.4   3.0
# five   2002  Nevada  2.9   4.0
# six    2003  Nevada  3.2   5.0

=> 컬럼에 0부터 5까지 들어감

 

 

존재하지 않는 색인에 Nan 입력됨

val = pd.Series([-1.2,-1.5,-1.7], index=['two','four','five'])
frame2['debt'] = val
frame2
# <출력> 
#        year   state  pop  debt
# one    2000    Ohio  1.5   NaN
# two    2001    Ohio  1.7  -1.2
# three  2002    Ohio  3.6   NaN
# four   2001  Nevada  2.4  -1.5
# five   2002  Nevada  2.9  -1.7
# six    2003  Nevada  3.2   NaN

 

 

새로운 컬럼명 값에 True / False 값 입력받기

# <frame2>
#        year   state  pop  debt
# one    2000    Ohio  1.5   NaN
# two    2001    Ohio  1.7  -1.2
# three  2002    Ohio  3.6   NaN
# four   2001  Nevada  2.4  -1.5
# five   2002  Nevada  2.9  -1.7
# six    2003  Nevada  3.2   NaN

frame2['eastern']=frame2.state == 'Ohio'
frame2
# <출력> 
#        year   state  pop  debt  eastern
# one    2000    Ohio  1.5   NaN     True
# two    2001    Ohio  1.7  -1.2     True
# three  2002    Ohio  3.6   NaN     True
# four   2001  Nevada  2.4  -1.5    False
# five   2002  Nevada  2.9  -1.7    False
# six    2003  Nevada  3.2   NaN    False

 

컬럼삭제 ; del

del frame2['eastern']
frame2.columns
# <출력> Index(['year', 'state', 'pop', 'debt'], dtype='object')

 

pop ; 딕트 형태에서 컬럼명 이름 지정함

 

 

  • 바깥키 = 컬럼, 안쪽키 = row
frame3 = pd.DataFrame(pop)
frame3
# <출력> 
#       Nevada  Ohio
# 2001     2.4   1.7
# 2002     2.9   3.6
# 2000     NaN   1.5

 

 

  • 데이터 행 렬 바꾸기
frame3.T
# <출력>
#         2001  2002  2000
# Nevada   2.4   2.9   NaN
# Ohio     1.7   3.6   1.5

 

 

  • 색인 직접 지정
#frame3 = pd.DataFrame(pop)
#frame3
# <frame3>
#       Nevada  Ohio
# 2001     2.4   1.7
# 2002     2.9   3.6
# 2000     NaN   1.5

pd.DataFrame(pop,index=[2001,2002,2003])
# <출력>
#       Nevada  Ohio
# 2001     2.4   1.7
# 2002     2.9   3.6
# 2003     NaN   NaN

 

 

  • ???????▶▶▶▶▶
pdata = {'Ohio': frame3['Ohio'][:-1], 'Nevada': frame3['Nevada'][:2]}
pd.DataFrame(pdata)
# <출력>
#       Ohio  Nevada
# 2001   1.7     2.4
# 2002   3.6     2.9

 

 

판다스 세미콜론 (;) => 코드와 코드를 줄단위말고 한줄에 작성하고싶을때 사용

frame3.index.name = 'year'; frame3.columns.name = 'state'
frame3
# <출력> 
# state  Nevada  Ohio
# year               
# 2001      2.4   1.7
# 2002      2.9   3.6
# 2000      NaN   1.5

 

 

dataframe 에 저장된 데이터 2차원 배열로 반환

frame3.values   
# <출력>
# array([[2.4, 1.7],
#        [2.9, 3.6],
#        [nan, 1.5]])

 

dataframe 서로 다른 dtye 가지고 있다면 모든 컬럼 배열 선택 하기 위한 함수

frame2.values
# <출력>
# array([[2000, 'Ohio', 1.5, nan],
#        [2001, 'Ohio', 1.7, -1.2],
#        [2002, 'Ohio', 3.6, nan],
#        [2001, 'Nevada', 2.4, -1.5],
#        [2002, 'Nevada', 2.9, -1.7],
#        [2003, 'Nevada', 3.2, nan]], dtype=object)

 

 

 

 

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python-Pandas] #3 drop  (0) 2022.11.07
[Python-Pandas] #2 index  (0) 2022.11.07
[Python-Numpy] #4  (0) 2022.11.06
[Python-Numpy] #3  (0) 2022.11.06
[Python-Numpy] #2  (2) 2022.11.06
Comments