반응형

8.2.2 색인 병합하기

left_index= True혹은 right_index= True 옵션을 지정해서 해당 색인을 병합키로 사용할 수 있다.

import pandas as pd
left1= pd.DataFrame({'key':['a','b','a','a','b','c']})
right1 = pd.DataFrame({'group_val':[3.5, 7]}, index = ['a','b'])
print(left1)
print(right1)
pd.merge(left1, right1, left_on='key', right_index= True)

pd.merge(left1, right1, left_on='key', right_index= True , how='outer')

 

계층 색인된 데이터는 암묵적으로 여러 키를 병합하는 것이라 약간 복잡하다.

import numpy as np
lefth = pd.DataFrame({'key1':['Ohio','Ohio','Ohio','Nevada','Nevada'],
                     'key2':[2000,2001, 2002, 2001, 2002],
                     'data':np.arange(5.)})
righth = pd.DataFrame(np.arange(12).reshape((6,2)),index=[['Nevada','Nevada','Ohio','Ohio','Ohio','Ohio'],[2001,2000,2000,2000,2001,2002]],columns = ['event1','event2'])
print(lefth)
print(righth)
pd.merge(lefth, righth, left_on=['key1','key2'], right_index= True)

색인 값을 다룰 때는 how='outer'옵션

여러개 사용할 경우 

how='outer', left_index= True, right_index = True 

 

색인으로 병합할 떄 DataFrame의 join메서드를 사용하면 편리하다.

join 메서드는 컬럼이 겹치지 않으며 같거나 유사한 색인 구졸르 가진 여러 개의 DataFrame 객체를 병합할 때 사용할 수 있다.

left2.join(right2, how='outer')

left1.join(right1, on='key')

left2.join([right2, another])

 

8.2.3 축 따라 이어붙이기

데이터를 합치는 또 다른 방법으로 이어붙이기(연결, 적층 이라고도 한다.)

데이터 연결 binding 적층 stacking

Numpy 는 ndarray를 이어 붙이는 concatenate 함수를 제공한다.

arr = np.arange(12).reshape((3,4))
print(arr)
np.concatenate([arr,arr], axis = 1)

Series나 DataFrame같은 pandas객체의 컨텍스트 내부에는 축마다 이름이 있어서 배열을 쉽게 이어붙일 수 있도록 되어 있다.

pandas의 concat함수 

s1 = pd.Series([0,1], index=['a','b'])
s2 = pd.Series([2,3,4], index=['c','d','e'])
s3 = pd.Series([5,6], index=['f','g'])
pd.concat([s1,s2,s3], axis=1)
s4 = pd.concat([s1, s3])
pd.concat([s1,s4], axis = 1)
pd.concat([s1, s4], axis = 1, join ='inner')

ignore_index = True  필옇ㄴ 데이터를 포함하고 있지 않은 경우

 

 

8.3 재형성과 피벗

표 형식의 데이터를 재배치 하는 다양한 기본 연산이 존재한다. 

 

8.3.1 계층적 색인으로 재형성하기

stack 과 unstack

stack: 데이터의 컬럼을 로우로 피벗(또는 회전)시킨다.

unstack : 로우를 컬럼으로 피벗시킨다.

 

 stack메서드를 시용하면 컬럼이 로우로 피벗된다.

unstack메서드를 사용하면 위 계층적 색인을 가진 Series로부터 다시 DataFrame을 얻을 수 있다.

unstack레벨 숫자나 컬럼을 사용해서 할 수 도 있다. 

.stack(dropna= False)

 

8.3.2 긴 형식에서 넓은 형식으로 피벗하기

시계열 데이터

pivot('','')

 

8.3.3 넓은 형식에서 긴 형식으로 피벗하기

pivot과 반대되는 연산은 pandas.melt다 .

하나의 컬럼을 여러 개의 새로운 DataFrame으로 생성하기보다는 여러 컬럼을 하나로 병합하고 DataFrame을 입력보다 긴 형태로 만들어낸다.

pd.melt(Dataframe,['key'])

reset_index()를 이용해서 데이터를 다시 컬럼으로 돌려놓는다.

 

반응형
반응형

7.3.2 정규 표현식

정규 표현식은 텍스트에서 문자열 패턴을 찾는 유연한 방법을 제공한다.

regex라 불리는 단일 표현식은 정규 표현 언어로 구성된 문자열이다.

re 모듈 

re모듈 함수는 패턴 매칭, 치환 , 분리 세 가지로 나눌 수 있다.

regex = re.compile('패턴')

regex.findall(text)

 

search 

match

sub

sub, subn

split

 

7.3.3 pandas의 벡터화된 문자열 함수

IGNORECASE RE옵션

 

08. 데이터 준비하기: 조인 병합 변형

 

8.1 계층적 색인

계층적 색인 은 pandas의 중요한 기능인데 축에 대해 다중(둘 이상) 색인 단계를 지정할 수 있도록 해준다.

높은 차원의 데이터  -> 낮은 차원의 형식으로 

계층적으로 색인된 객체는 대부분의 부분집합을 부분적 색인으로 접근 하는 것이 가능하다.

loc사용

 

계층적인 색인은 데이터를 재형성하고 피벗 테이블 생성 같은 그룹 기반의 작업을 할 때 중요하게 사용한다.

unstack()메서드

unstack의 반대 작업은 stack 메서드로 수행한다.

 

8.1.1 계층의 순서를 바꾸고 정렬하기 

swaplevel 은 넘겨 받은 두 개의 계층 번호나 이름이 뒤바뀐 새로운 객체를 반환한다.

sort_index 메서드는 단일 계층에 속한 데이터를 정렬한다.

 

8.1.2 계층별 요약 통계

frame.sum(level='')

frame.sum(level='', axis = '1')

 

8.1.3 DataFrame의 컬럼 사용하기

set_index()

drop = False

reset_index()

 

8.2 데이터 합치기

pandas.merge는 하나 이상의 키를 기준으로 DataFrame의 로우를 합치나. SQL이나 다른 관계형 데이터베이스의 JOIN연산과 유사하다.

pandas.concat는 하나의 축을 따라 객체를 이어붙인다.

combile_first 인스턴스 메서드는 두 객체를 포개서 한 객체에서 누락된 데이터를 다른 객체에 있는 값으로 채울 수 있도록 한다.

 

8.2.1 데이터베이스 스타일로 DataFrame합치기

병합 (merge)이나 조인(join) 연산은 관계형 데이터베이스의 핵심적인 연산인데 , 하나 이상의 키를 사용해서 데이터 집합의 로우를 합친다.

pandas의 merge

pd.merge(df1, df2, on = 'key')

pd.merge(df1, df2, how= 'outer')

inner: 양쪽 테이블 모두에 존재하는 키 조합을 사용한다.

left : 왼쪽 테이블 모두에 존재하는 키 조합을 사용한다.

right : 오른쪽 테이블에 존재하는 모든 키 조합을 사용한다.

output : 양쪽 테이블에 존재하는 모든 키 조합을 사용한다.

 

축 이름을 변경해서 수동으로 컬럼 이름이 겹치게 할 수도 있고 , merge함수에 있는 suffixes 인자로 두 DataFrame객체에 겹치는 컬럼 이름 뒤에 붙일 문자열을 지정해 줄 수도 있다.

 

반응형
반응형

7.2.1 중복 제거하기

DataFrame의 duplicated메서드는 각 로우가 중복인지 아닌지 알려주는 불리언 Series를 반환한다.

data.duplicated()

 

drop_duplicates 는 dupliacated배열이 False인 DataFrame을 반환한다.

data.drop_duplicates([컬럼이름])

keep = 'last'옵션을 넘기면 마지막으로 발견된 값을 반환한다.

 

7.2.2 함수나 매핑을 이용해서 데이터 변형하기

Series의 map 메서드는 사전류의 객체나 어떤 함수를 받을 수 있는데, 위 데이터는 대소문자 섞여 있는 사소한 문제가 있으므로 str.lower메서드를 사용해서 모두 소문자로 변경한다.

lowercased = data['food'].str.lower()

meat_to_animal  => dictionary

data['animal'] =  lowercased.map(meat_to_animal)

data['food'].map(lambda x:meat_to_animal[x.lower]  )

 

7.2.3 값 치환하기

fillna메서드를 사용해서 누락된 값을 채우는 일은 일반적인 값 치환 작업이라고 볼 수 있다.

replace() 메서드를 이용하면 값을 pandas에서 인식할 수 있는 NA값으로 치환한 새로운 Series 를 생성 할 수 있다.

inplace = True

data.replace(,np.nan)

 

7.2.4 축 색인 이름 바꾸기

transform = lambda x: x[:4].upper()

data.index = data.index.map(transform )

data.rename메서드를 사용한다. 원래 객체를 변경하지 않고 새로운 객체를 생성하려면 

원본 데이터를 바로 변경하려면 inplace = True옵션을 넘겨주면 된다.

 

7.2.5 개별화와 양자화

연속성 데이터는 종종 개별로 분할하거나 아니면 분석을 위해 그룹별로 나누기도 한다.

pandas.cut으로 categorical 로 

ages list

bins list 

 

cats = pd.cut(ages, bins)

이 객체는 그룹 이름이 담긴 배열이라고 생각하면 된다.

 

이 Categorical 객체는 codes 속성에 있는 ages 데이터에 대한 카테고리 이름을 categoricals라는 배열에 내부적으로 담고 있다.

 

pd.value_counts(cats)는 pandas.cut결과에 대한 그룹수다.

 

간격을 나타내는 표기법은 중괄호로 시작해서 대괄호로 끝나는데 중괄호 쪽의 값은 포함하지 않고 대괄호 쪽의 포함하는 간격을 나타낸다.

right = False를 넘겨서 중괄호 대신 대괄호 쪽이 포함되지 않도록 바 꿀 수 있다.

labels 옵션으로 그룹의 이름을 직접 넘겨줄 수도 있다.

percision = 2옵션은 소수점 아래 2자리까지로 제한한다.

qcut 4분위로 분류

 

7.2.6 특잇값을 찾고 제외하기

outlier 을 제외하거나 적당한 값으로 대체하는 것이 중요하다.

data.describe()

nay 메서드

np.sige()

 

7.2.7 치환과 임의 샘플링

numpy.random.permutation함수를 이용하면 Series나 DataFrame의 로우를 쉽게 임의 순서로 재배치할 수 있다.

permutation 함수로 넘기면 바뀐 순서가 담긴 정수 배열이 생성된다.

배열은 iloc 기반의 색인이나 take함수에서 사용가능하다.

치환 없이 일부만 임의로 선택하려면 Series나 DataFrame의 sample메서드를 사용하면 된다

sample에 replace = True옵션 : 표본을 치환을 통해 성성해내려면

 

7.2.8 표시자/ 더미 변수 계산하기

통계 모델이나 머신러닝 애플리케이션을 위한 또 다른 데이터 변환은 분류값을 '더미'나 '표시자' 행렬로 전환하는 것이다.

get_dummies가 이를 위한 함수인데 독자 스스로 새로운 방법을 고안해내는 것도 어렵지 않을 것이다.

 

표시자 DataFrame안에 있는 컬럼에 접두어 prefix를 추가한 후 다른 데이터와 병합하고 싶을 경우가 있다.

get_dummies함수의 prefix 인자를 사용하면 이를 수행할 수 있다.

get_dummies 와 cut같은 이산함수를 잘 조합하면 통계 애플리케이션에서 유용하게 사용할 수 있다.

numpy.random.see 함수를 이용해서 난수 시드값을 지정했다.

pandas.get_dummies 

 

7.3 문자열 다루기

파이썬은 문자열이나 텍스트 처리의 용이함 덕분에 원시 데이터를 처리하는 인기 있는 언어가 되었다.

복잡한 패턴 매칭이나 텍스트 조작은 정규 표현식을 필요로 한다.

pandas는 배열 데이터 전체에 쉽게 정규 표현식을 적용하고 , 누락된 데이터를 편리하게 처리할 수 있는 기능을 포함하고 있다.

 

7.3.1 문자열 객체 메서드

split 메서드

[x.strip() for x in val.split(',')]

join 메서드로 연결

 

일치하는 부분 문자열의 위치 를 찾는 방법 index나 find  in

index의 경우 문자열을 찾지 못하면 예외를 발생시킨다는 것이다.

count는 특정 부분문자열이 몇 건 발견되었는지 반환한다.

replace 는 찾아낸 패턴을 다른 문자열로 치환한다.

반응형
반응형

6.3 웹 API 와 함께 사용하기

requests 패키지

import requests 

resp = requests.get(url)

data = resp.json()

 

6.4 데이터베이스와 함께 사용하기

import sqlite3

con = sqlite3.connect()

con.execute(query)

con.commit()

 

con.executemany(stmt, data)

con.commit()

 

드라이브 

 

조회 

cursor = con.execute(sql쿼리)

rows = cursor.fetchall()

cursor.description 

 

SQL툴킷은 SQLAlchemy프로젝트는  SQL 데이터베이스 간의 일반적인 차이점을 추상화하여 제공한다.

import sqlalchemy as sqla

db = sqla.create_engine("sqlite:///mydata.sqlite")

pd.read_sql(쿼리,db)

 

07. 데이터 정제 및 준비

데이터 분석과 모델링 작업:

데이터를 불러오고 , 정제하고, 변형하고 , 재정렬하는 데이터 준비 과정에 많은 시간을 들이게 된다.

80% 를 잡아먹기도 한다.

 

7.1 누락된 데이터 처리하기

누락된 데이터를 처리하는 일은 데이터 분석 애플리케이션에서 흔히 발생하는 일이다.

pandas의 설계 목표중 하나는 누락 데이터를 가능 한 쉽게 처리할 수 있도록 하는 것이다.

누락 데이터 

산술 데이터에 한해 pandas는 누락된 데이터를 실숫값은 NaN으로 취급한다.

이는 누락된 값을 쉽게 찾을 수 있도록 하는 파수병 역할을 한다.

 

격측치 를 NA Not Available 

isnull()

 

파이썬의 내장 None값 또한 NA 값으로 취급한다.

pandas.isnull 같은 사용자 API 함수에서는 성가신 부분을 추상화로 제거했다.

 

NA 처리 메서드

dropna 누락된 데이터가 있는 축(로우, 컬럼)을 제외시킨다. 어느 정도의 누락 데이터까지 용인할 것인지 지정할 수 있다.
fillna 누락된 데이터를 대신할 값을 채우거나 'ffill'이나 'bfill'같은 보간 메서드를 적용한다.
isnull 누락되거나 NA인 값을 알려주는 불리언값이 저장된 같은 형의 객체를 반환한다.
notnull isnull과 반대되는 메서드

 

7.1.1 누락된 데이터 골라내기

from numpy import nan as NA

dropna 

pandas.isnull 불리언 색인을 사용해 직접 손으로 제거하는 것도 한가지 방법이지만 ,

dropna를 매우 유용하게 사용할 수 있다.

data[data.notnull()]

how = 'all' 옵션을 넘기면 모두 NA값은 로우만 제외시킨다.

data.dropna(how='all')

 

컬럼을 제외시키는 방법도 동일하게 동작한다. 옵션은 axis = 1을 넘겨주면 된다.

 

DataFrame의 로우를 제외시키는 방법은 시계열 데이터에 주로 사용되는 경향이 있다. 몇 개 이상의 값이 들어 있는 로우만 살펴보고 싶다면 thresh인자에 원하는 값을 넘기면 된다.

data.dropna(thresh=2)

 

7.1.2 결측치 채우기

fillna메서드에 채워 넣고 싶은 값을 넘겨주면 된다.

fillna 에 사전값을 넘겨서 각 컬럼마다 다른 값을 채울 수도 있다.

fillna에 새로운 객체를 반환하지만 다음처럼 기존 객체를 변경 할 수 도 있다. inplace = True

재색인에서 사용가능한 보간 메서드는 fillna메서드에서도 사용가능하다.

df.fillna(method = 'ffill')

df.fillna(method = 'ffill', limit2) => 2개만 

Series 의 평균값이나 중간값을 전달 할 수도 있다.

data.filna(data.mean())

 

7.2 데이터 변형

필터링 ,정제 및 다른 변형 

 

반응형
반응형

6.1.1 텍스트 파일 조금씩 읽어오기

pandas 로우의 개수 

10개의 데이터만 출력

pd.options.display.max_rows = 10

pd.read_csv('',nrows = 5)

파일을 여러 조각으로 읽고 싶다면 chunksize 옵션으로 로우의 개수를 주면 된다.

pd.read_csv('',chunksize = 1000)

 

6.1.2 데이터를 텍스트 형식으로 기록하기

data.to_csv() 데이터를 쉼표로 구분된 형식으로 파일에 쓸 수 있다.

비여 있는 값을 처리 na_rep = 'NULL'

index = False

header = False

columns = ['','','']

 

Series 에도 to_csv메서드가 존재한다.

 

6.1.3 구분자 형식 다루기

pandas_read_table함수를 이용해서 디슼에 표 형태로 저장된 대부분의 파일 형식을 불러올 수 있다.

delimiter 필드를 구분하기 위한 한 문자로 된 구분자 . 기본값은 ','

 

csv.writer 

csv.reader

 

6.1.4 JSON 데이터

import son

json.loads(obj)

json.dumps() JSON형태로 변환한다.

pd.read_json()

data.to_json()

 

6.1.5 XML과 HTML: 웹 스크래핑

lxml

Beautiful Soup

html5lib 같은 HTML과 XML 형식의 데이터 

 

pip install lxml

tables = pd.read_html()

 

lxml.objectify를 이용해서 XML 파싱하기

XML은 계층적 구조와 메타데이터를 포함하는 중첩된 데이터 구조를 지원하는 또 다른 유명한 데이터 형식이다.

from lxml import objectify

parsed = objectify.parse(open(경로))

root = parsed.getroot()

 

from io import StringIO

tag = ''

root = objectify.parse(StringIO(tag)).getroot()

 

6.2 이진 데이터 형식

pickle 직렬화된 객체는 내장 함수인 pickle로 직접 불러오거나 아니면 좀 더 편리한 pickle함수인 pandas.read_pickle메서드를 이용하여 불러올 수 있다.

 

6.2.1 HDF5 형식 사용하기

HDF5파일 포맷이다.

HDF5는 Hierarchical Data Format의 약자로 계층적 데이터 형식 

pd.HDFStore('파일이름.h5')

 

6.2.2 마이크로소프트 엑셀 파일에서 데이터 읽어오기

pandas.read_excel 함수를 사용해서 마이크로소프트 엑셀 2003 이후 버전의 데이터를 읽어 올 수 있다.

pd.ExcelFile('.xlsx')

pd.read_excel(,'Sheet1')

ExcelWrite를 생성해서 데이터를 기록하고 

pandas객체의 to_excel메서드롤 넘기면 된다.

반응형
반응형

5.2.8 중복 색인

is_unique 속성은 해당 값이 유일한지 아닌지 알려준다.

 

5.3 기술 통계 계산과 요약

pandas 객체는 일반적인 수학 메서드와 통계 메서드를 가지고 있다. 

이 메서드의 대부분은 Series나 DataFrame의 로구나 컬럼에서 단일 값(합이나 평균 같은) 을 구하는 축소 혹은 요약 통계범주에 속한다.

DataFrame

df.sum()

df.sum(axis='columns') axis ='columns'또는 axis=1 옵션을 넘기면 각 컬럼의 합을 변환한다.

skipna= False NA가 아니라면 Na값은 제외되고 계산된다.

level: 계산하려는 축인 계층적 색인(다중 색인)이라면 레벨에 따라 묶어서 계산한다.

 

idxmin이나 idxmax같은 메서드는 최솟값 혹은 최대값은 가지고 있는 색인값과 같은 간접 통계를 반환한다.

df.idxmax()

 

또 다른 메서드로 누산이 있다.

df.cumsum()

 

축소나 누산이 아닌 다른 종류의 메서드로 describe가 있는데 , 이 메서드는 한번에 여러 개의 통계 결과를 만들어낸다.

df.describe()

 

5.3.1 상관관계와 공분산

conda install pandas-datareader :

금융 사이트에서 구한 주식 가격과 시가총액을 담고 있는 다음 DataFrame을 생각

conda 혹은 pip를 통해 설치

import pandas_datareader.data as web
import pandas as pd
all_data = {ticker:web.get_data_yahoo(ticker) for ticker in ['AAPL','IBM','MSFT','GOOG']}
price = pd.DataFrame({ticker:data['Adj Close'] for ticker, data in all_data.items()})
volume = pd.DataFrame({ticker:data['Volume'] for ticker,data in all_data.items()})

 

returns = price.pct_change()
returns.tail()

시계열 데이터

corr메서드와 cov메서드

corr메서드는 NA가 아니며 정렬된 색인에서 연속하는 두 Series에 대해 상관관계를 계싼하고 cov메서드는 공분산을 계산

print(returns['MSFT'].corr(returns['IBM']))
print(returns['MSFT'].cov(returns['IBM']))

좀 더 편리한 문법

returns.MSFT.corr(returns.IBM)
returns.corr()

DataFrame의 corrwith메서드를 사용하면 다른 Series나 DataFrame과의 상관관계를 계산한다.

Series를 넘기면 각 컬럼에 대해 계산한 상관관계를 담고 있는 Series를 반환한다.

returns.corrwith(returns.IBM)

DataFrame을 넘기면 맞아 떨어지는 컬럼 이름에 대한 상관관계를 계산한다. 

returns.corrwith(volume)

axis ='columns'옵션을 넘기면 각 컬럼에 대한 상관관계와 공분산을 계산한다. 모든 경우 데이터는 상관관계를 계산하기 전에 색인의 이름순으로 정렬된다.

 

5.3.2 유일값 값 세기 멤버십

중복되는 값을 제거하고 유일값만 담고 있는 Series를 반환한다.

obj = pd.Series(['c','a','d','a','a','b','b','c','c'])
uniques = obj.unique()
print(uniques)

uniques.sort()를 이용해서 정렬

value_counts메서드는 Series 에서 도수를 계산하여 반환한다.

obj.value_counts()

value_counts에서 반환하는 Series는 담고 있는 내림차순으로 정렬한다.value_counts메서드는 pandas의 최상위 메서드로 , 어떤 배열이나 순차 자료구조에서도 사용할 수 있다.

pd.value_counts(obj.values, sort = False)

isin 메서드는 어떤 값이 Series에 존재하는지 나타내는 불리언 벡터를 반환하는데, Series나 DataFrame의 컬럼에서 값을 골라내고 싶을 때 유용하게 사용할 수 있다.

print(obj)
mask = obj.isin(['b','c'])
print(obj[mask])

isin과 관련이 있는 Index.get_indexer메서드는 여러 값이 들어 있는 배열에서 유일한 값의 색인 배열을 구 할 수 있다.

 

DataFrame의 apply함수에 pandas.value_counts를 넘기면 다음과 같은 결과를 얻을 수 있다.

data = pd.DataFrame({'Qu1':[1,3,4,3,4],'Qu2':[2,3,1,2,3],'Qu3':[1,5,2,4,4]})
result = data.apply(pd.value_counts).fillna(0)
result

 

06. 데이터 로딩과 저장 파일 형식

6.1 텍스트 파일에서 데이터를 읽고 쓰는 법

read_csv와 read_table 을 주로 사용

cat명령을 사용하면 파일의 내용을 확인 할 수 있다.

na_values 옵션은 리스트나 문자열 집합을 받아서 누락된 값을 처리한다.

skiprows를 컬럼을 띄운다.

 

pandas NA나 NULL 처리 

pd.read_csv('',na_values=['NULL'])

pd.isnull(data)

sentinels={'message':['foo','NA'],'something':['two']}

pd.read_csv('',na_values=sentinels)

반응형
반응형

05. pandas 시작하기

5.2.1 재색인

pandas 객체의 중요한 기능 중 하나는 reindex인데 , 새로운 색인에 맞도록 객체를 새로 생성한다.

obj = pd.Series([4.5,7.2,-5.3,3.6], index=['d','b','a','c'])

print(obj)

obj2 = obj.reindex(['a','b','c','d','e'])

print(obj2)

method='ffill'  메서드를 이용해서 누락된 값을 직전의 값으로 채워 넣을 수 있다.

 

DataFrame에 대한 reindex는 로우(색인), 컬럼 또는 둘 다 변경 가능하다.

그냥 순서만 전달하면 로우가 재색인된다.

 

5.2.2 하나의 로우나 컬럼 삭제하기

색인 배열,또는 삭제하려는 로우나 컬럼이 제외된 리스트를 이미 가지고 있다면 로우나 컬럼을 쉽게 삭제할 수 있는데 이 방법은 데이터의 모양을 변경하는 작업이 필요하다.

drop메서드를 사용하면 선택한 값들이 삭제된 새로운 객체를 얻을 수 있다.

 

obj.drop('인덱스 값')

 

drop함수에 인자로 로우 이름을 넘기면 해당 로우(axis 0)의 값을 모두 삭제한다.

컬럼의 값을 삭제할 때는 axis = 1 또는 axis='columns'를 인자로 넘겨주면 된다.

drop함수처럼 Series나 DataFrame의 크기 또는 형태를 변경하는 새로운 객체를 반환하는 대신 원본 객체를 변경한다.

obj.drop('c',inplact= True)

 

5.2.3 색인하기 선택하기 거르기

Series의 색인 (obj[...])은 Numpy 배열의 색인과 유사하게 동작하지만 정수가 아니어도 된다는 점이 다르다.

슬라이싱 [시작점: 끝점] 

라벨 이름으로 하면 끝점은 포함된다.

 

loc과 iloc으로 선택하기

DataFrame의 로우에 대해 라벨로 색인하는 방법으로 특수한 색인 필드인 loc과 iloc을 소개

축 이름을 선택할 떄는 loc

정수 색인으로 선택할 때는 iloc 

 

5.2.4 정수 색인

정수 색인으로 pandas 객체를 다루다보면 리스트나 튜플 같은 파이썬 내장 자료구조에서 색인을 다루는 방법과의 차이점 떄문에 실수하게 되는 경우가 있다.

ser = pd.Series(np.arange(3))

print(ser)

 

ser2= pd.Series(np.arange(3.), index=['a','b','c'])

print(ser2[-1])

 

print(ser[:1])

print(ser.loc[:1])

print(ser.iloc[:1])

 

5.2.5 산술 연산과 데이터 정렬

두 객체를 더할 떄 

겹치는 색인이 없는 경우 데이터는 NA값이 된다.

산술 연산시 누락된 값은 전파된다.

 

 

산술 연산 메서드에 채워 넣을 값 지정하기

df1 = pd.DataFrame(np.arange(12.).reshape((3,4)), columns= list('abcd'))

df2 = pd.DataFrame(np.arange(20.).reshape((4,5)), columns= list('abcde'))

df2.loc[1,'b'] = np.nan

print(df1)

print(df2)

print(df1+ df2)

 

fill_value 로 없는 값을 채원다

 

DataFrame과 Series간의 연산

브로드캐스팅

axis 값은 연산을 적용할 축 번호다.

 

 

5.2.6 함수 적용과 매핑

frame.apply 메서드 사용

axis = 'columns'

frame.applymap()

 

5.2.7 정렬과 순위

DataFrame은 로우나 컬럼 중 하나의 축을 기준으로 정렬 할 수 있다.

sort_index(axis =1, ascending=False)

 

Series객체를 값에 따라 정렬하고 싶다면 sort_values메서드를 사용하면 된다.

sort_values(by ='b') 컬럼 이름

리스트도 가능하다.

 

순위는 정렬과 거의 흡사한데, 1부터 배열의 유효한 데이터 개수까지 순서를 매긴다.

rank()

rank(method='first') 

rank(ascentding=False, method='max') 

반응형
반응형

04. NumPy 기본: 배열과 벡터 연산

4.6 난수

random 함수를 보강하여 다양한 종류의 확률분포로부터 효과적으로 표본값을 생성하는 데 주로 사용된다.

normal 을 사용하여 표준정규분포로 부터 4x4 크기의 표본을 생성할 수 있다.

np.random.normal(size = (4,4))

random모듈은 한 번에 하나의 값만 생성할 수 있다. 

numpy.random은 매우 큰 표본을 생성하는데 파이썬 내장 모듈보다 수십 배 이상 빠르다.

 

유사난수

난수 생성기의 시드값에 따라 정해진 난수를 알고리즘으로 생성하기 떄문이다.

np.random.seed

 

numpy.random에서 제공하는 데이터를 생성할 수 있는 함수들은 전역 난수 시드값을 이용한다.

numpy.random.RandomState를 이용해서 다른 난수 생성기로부터 격리된 난수 생성기를 만들 수 있다.

 

4.7 계단 오르내리기 예제

계단 오르내리기 예제는 배열 연산의 활용을 보여줄 수 있는 간단한 애플리케이션이다.

import random

import matplotlib.pyplot as plt

position = 0

walk = [pisition]

steps = 1000

for i in range(steps):

  step = 1 if random.randint(0,1else -1

  position += step

  walk.append(position)

 

plt.plot(walk[:100])

nsteps = 1000

draws = np.random.randint(0,2, size = nsteps)

steps = np.where(draws >0 , 1-1)

walk = steps.cumsum()

 

print(walk.min())

print(walk.max())

(np.abs(walk) >= 10).argmax()

argmax는 배열 전체를 모두 확인하기 때문에 효과적인 방법은 아니다.

True가 최댓값임을 이미 알고 있었다.

 

4.7.1 한 번에 시뮬레이션

시뮬레이션

np.random함수

nwalks = 5000

nsteps = 1000

draws = np.random.randint(0,2, size = (nwalks,nsteps))

steps = np.where(draws >0 , 1-1)

walk = steps.cumsum(1)

print(walk)

 

print(walk.min())

print(walk.max())

 

hist30 = (np.abs(walk) >= 30).any(1)

print(hist30)

 

print(hist30.sum())

 

crossing_times = (np.abs(walk) >= 30).argmax(1)

print(crossing_times.mean())

 

05. pandas 시작하기

고수준의 자료구조와 파이썬에서 빠르고 쉽게 사용할 수 있는 데이터 분석 도구

pandas는 다른 산술 계산 도구인 Numpy와 Scipy, 분석 라이브러리인 statsmodels와 scikit-learn, 시각화 도구인 matplotlib와 함께 사용하는 경우가 흔하다.

pandas는 for문을 사용하지 않고 데이터를 처리한다거나 배열기반의 함수를 제공하는 등 Numpy 의 배열 기반 계산 스타일을 많이 차용했다.

pandas는 표 형식의 데이터나 다양한 형태의 데이터를 다루는 데 초점을 맞춰 설계

Numpy는 단일 산술 배열 데이터를 다루는데 특화되어 있다.

import pandas as pd

from pandas import Series, DataFrame

 

5.1 pandas 자료구조 소개

Series, DataFrame

 

5.1.1 Series

Series는 일련의 객체를 담을 수 있는 1차원 배열 같은 자료구조다.

index 이라고 하는 배열의 데이터와 연관된 이름을 가지고 있다. 

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

print(obj)

print(obj.values)

print(obj.index)

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

print(obj2)

print(obj2.index)

print(obj2['a'])

obj2['d'] = 6

print(obj2[['c','a','d']])

obj2[obj2 >0 ]

obj2 *2

np.exp(obj2)

'b' in obj2

'e' in obj2

 

Series 객체의 색인에는 사전의 키값이 순서데로 들어간다.

색인을 직접 지정하고 싶다면 원하는 순서대로 색인을 직접 넘겨줄 수도 있다.

 

NaN not a number NA 값으로 취급된다.

'NA'를 누락된 데이터를 지칭하는데 사용하도록 하겠다

pandas 의 isnull 과 notnull함수는 누락된 데이터를 찾을 때 사용된다.

 

5.1.2 DataFrame

DataFrame은 표 같은 스프레드시트 형식의 자료구조이고 여러 개의 컬럼이 있는데 각 컬럼은 서로 다른 종류의 값을 담을 수 있다.

DataFrame은 Series 와 같은 방식으로 자동으로 대입되며 컬럼은 정렬되어 저장된다.

DataFrame 객체는 브라우저에서 좀 더 보기 편하도록 html표 형식으로 출력될 것이다.

head()

loc[] :로우는 위치나 

 

존재하지 않는 컬럼을 대입하면 새로운 컬럼을 생성한다.

columns

del 예약어를 사용해서 컬럼을 삭제 할 수 있다.

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)

print(frame)

print(frame.head())

pd.DataFrame(data, columns = ['year','state','pop'])

frame2 = pd.DataFrame(data, columns = ['year','state','pop','debt'],

                      index=['one','two','three','four','five','six'])

print(frame2)

print(frame2.columns)

print(frame2['state'])

print(frame2.year)

print(frame2.loc['three'])

frame2['debt'] = 16.5

print(frame2)

frame2['debt'] = np.arange(6.)

print(frame2)

val = pd.Series([-1.2,-1.5,-1.7], index=['two','four','five'])

frame2['debt'] = val

frame2

frame2['eastern'] = frame2.state =='Ohio'

frame2

del frame2['eastern']

frame2.columns

Numpy 배열과 유사한 문법으로 데이터를 전치(컬럼과 로우를 뒤집음)할 수 있다.

frame3.index.name =''

frame3.columns.name = 

frame3.values

5.1.3 색인 객체

pandas의 색인 객체는 표 형식의 데이터에서 각 로우와 컬럼에 대한 이름과 다른 메타데이터(축의 이름 등)를 저장하는 객체다.

.index 사용

 

색인 객체는 변경이 불가능하다.

 

pd.Index(np.arange(3))

 

5.2 핵심 기능

Series, DataFrame 에 저장된 데이터를 다루는 기본적인 방법을 설명

pandas 라이브러리

반응형

+ Recent posts