59doit
[Python-Pandas] #1 본문
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 |