두개 이상의 DataFrame을 합치는 방법에 대해 알아보겠습니다. 판다스에서는 합치는 메소드로 merge(), join(), concat() 등이 있는데 이번 포스팅에서는 merge()에 대해서만 살펴보겠습니다. DataFrame 두개를 먼저 임의로 만들겠습니다. import pandas as pd data1 = {'No':[1001,1002,1003,1005,1006], 'Name':['David','Terry','Tim','John','Max'], 'Department':['Management','Engineer','Engineer','Secretary','Delivery'], 'Entered Date':['2010-01-03','2000-05-20','2007-07-07','2019-03-13',..
Pandas 내의 시간 데이터를 다루는 방법에 대해 알아보겠습니다. 시간데이터(datatime64) 타입으로 변경하기 시간데이터로 바꿔야만 되는 것들이 있습니다. 리샘플링을 할 경우에 시간데이터가 반드시 필요합니다. 그런데 보통 데이터를 받아오면 시간을 나타나는 데이터가 object로 표현되어 있습니다. 이럴 때 시간데이터로 타입으로 변경할 수 있습니다. 먼저 데이터를 불러오겠습니다. import pandas as pd df 다음과 같은 데이터를 가져와 보겠습니다. df.dtypes 타입을 보면 object 입니다. 이 object를 시간데이터인 datatime64 타입으로 변경하겠습니다. df['Data'] = pd.to_datetime(df['Data'],format='%Y-%m-%d %H:%M:%S..
시간 데이터를 DataFrame으로 처리할 때 날짜 단위를 바꿔가면서 분석하고 싶을 때가 있습니다. 다행이도 판다스를 이용하면 주기를 연(Yearly), 월(Monthly), 주(Weekly), 일(Daily) 단위로 축약해서 할 수가 있습니다. 바로 resample() 함수를 사용해서 시간 간격을 재조정합니다. resample() 함수를 사용해 데이터를 가공하는 과정을 리샘플링(Resampling)이라 하는데요. 크게 두가지 부류로 나뉩니다. 업 샘플링 : 분 단위, 초 단위로 샘플양을 증가시키는 리샘플링 다운 샘플링 : 몇 일, 몇 달 단위로 샘플양을 감소시키는 리샘플링 샘플양을 증가시키는 방향으로 가면 업 샘플링이고 감소시키면 다운 샘플링입니다. 보통 일 단위 자료를 많이 쓰기 때문에 분 단위로 간..
데이터를 수집하면 전산오류나 사람의 실수로 결측치가 발생하게 됩니다. 특히 외부에서 데이터를 가져오면 더욱 그럴 수 밖에 없는데 결측치를 방치하고 알고리즘에 데이터셋을 넣게 되면 아무리 좋은 알고리즘이라도 성능이 떨어지고 엉뚱한 결론에 도달할 수도 있습니다. 돈과 관련된 것이라면 아주 치명적인 결과를 만들수도 있습니다. 따라서 본격적인 분석을 하기 전에 결측치를 먼저 처리하는 과정이 필요합니다. 결측치를 처리하는 방법을 몇 가지 소개하겠습니다. 먼저 간단한 DataFrame을 만들겠습니다. import numpy as np import pandas as pd r1 = [1,np.nan,2,3] r2 = [4,5,np.nan,6] r3 = [7,8,9,np.inf] df = pd.DataFrame({'r1..
다들 그러는지 잘 모르겠지만 저는.. 단순하게 pandas.read_excel으로 xlsx를 불러오면 다음과 같은 오류가 뜹니다. import pandas as pd pd.read_excel('./area.xlsx') 그래서 방법을 찾다 알게 된 것이 engine을 바꾸면 된다해서 한 번 바꿔봤습니다. xlrd 가 업데이트 되면서 xlsx 지원을 하지 않는다고 하니 판다스의 기본 engine이 xlrd로 설정되어 있나봅니다. 이유가 분명해서 그런지 생각보다 간단히 해결이 되었습니다. 그냥 engine을 openpyxl로 바꾸면 됩니다. 먼저 openpyxl 모듈이 설치되어 있어야 합니다. 설치가 안 되있다면 다음과 같이 입력해 설치를 합시다.(주피터가 아닐경우 !는 빼야 실행이 됩니다) !pip inst..
이번 포스팅에서는 DataFrame 에서 row를 선택하는 방법에 대해 살펴볼까 합니다. 크게 두가지 방법이 있는데요. 둘 다 인덱스를 사용하는 것은 같지만 DataFrame 에서 사용하는 인덱스를 우리가 설정할 수 있기 때문에 설정을 한 것으로 찾느냐 아니면 DataFrame 에 저장되어 있는 인덱스 번호로 찾느냐는 차이입니다. 데이터 상황에 맞춰서 두가지를 혼용해서 쓸 수 있습니다. 살펴볼 것은 다음과 같습니다. 1. loc 2. iloc 아래와 같은 DataFrame을 가져왔습니다. 2019년 1월 기준 코스피 200 종목입니다. 현재 인덱스가 정해지지 않아서 숫자로 표기되어 있습니다. '종목명' 으로 인덱스를 설정하겠습니다. df = df.set_index('종목명') 1. loc loc를 사용해..
DataFrame 에서는 원하는 인덱스를 설정하거나 리셋시킬 수 있습니다. 총 설정방법은 2가지와 리셋 1가지를 정리할 예정인데요. 다음과 같습니다. 1. 직접 배정 해주는 방법 2. set_index를 이용해 원래 있는 열을 인덱스로 배정하는 방법 3. reset_index를 이용해 인덱스 리셋 1. 직접 배정해 주는 방법 직접 배정해주려면 data와 갯수가 맞아야 합니다. 다음과 같은 메소드를 씁니다. DataFrame.index= list DataFrame.columns = list list로 설정된 값이 인덱스로 들어가게 됩니다. import numpy as np import pandas as pd ddf = pd.Dataframe(np.arange(0,16).reshape(4,4)) ddf dd..
DataFrame column 추가,삭제,순서변경을 해보겠습니다. import pandas as pd sise = pd.DataFrame({'저가' :[53800, 236000, 110000 ],'고가':[54800,234500,113000]},index=['삼성전자','SK','현대차']) sise 제가 임의로 삼성전자와 SK,현대차의 오늘의 고가,저가를 DataFrame 만들어서 진행하겠습니다. (실제 저가,고가는 아닙니다) 추가 여기서 고가-저가를 한 값들을 DataFrame의 column으로 추가를 해보겠습니다. 간단한 연산만 입력하면 추가할 수 있습니다. sise['range']=sise['고가']-sise['저가'] sise 순서변경 순서변경을 위해선 다시 재정의를 하는 방식으로 합니다. 원하..
DataFrame에 대해 살펴보겠습니다. Series가 1차원 형태의 자료구조라면 DataFrame은 2차원 형태의 자료구조입니다. Series보다 훨씬 다양하게 쓸수 있고 흔히 쓰는 엑셀(Excel)의 스프레트시트와 형태가 비슷하기 때문에 사용법을 조금 익히시면 계산측면에서는 엑셀보다 훨씬 효율적으로 쓸 수 있을겁니다. DataFrame 생성하기 먼저 DataFrame을 생성해서 살펴보겠습니다. from pandas import Series, DataFrame raw_data = {'col0':[1,2,3,4],'col1':[10,20,30,40],'col2':[100,200,300,400]} data = DataFrame(raw_data) print(raw_data) raw_data를 보시면 일반적인..
간단하게 Series의 슬라이싱에 대해서 살펴보겠습니다. 결론적으로 말하면 리스트와 동일합니다. import numpy as np import pandas as pd s = pd.Series(np.arange(1,6)) s s라는 Series에서 슬라이싱을 하겠습니다. 리스트와 동일한 방법으로 슬라이싱을 할 수 있습니다. s[1:3] 인덱스를 기준으로 슬라이싱이 된다는 것을 꼭 기억해주세요! 이번에는 인덱스를 0,1,2,3....으로 하지않고 a,b,c,d,e...로 해서 슬라이싱을 해보겠습니다. s1 = pd.Series(np.arange(1,6),['a','b','c','d','e']) s1 s1['c':'d'] s1 인덱스를 다른 것으로 정해놓아도 고유 인덱스번호는 가지고 있기 때문에 고유 인덱스번..
Series의 drop과 slicing 에 대해서 살펴보겠습니다. Drop 데이터를 받다보면 내가 필요없는 데이터들이 존재합니다. 그럴 때, drop을 이용해 데이터를 없앨 수 있습니다. import numpy as np import pandas as pd s = pd.Sereis(np.arange(1,6),['a','b','c','d','e'] s d를 없애보겠습니다. s.drop('d') 이번엔 d와 e를 없애보겠습니다. d와 e 두개 이상의 데이터를 없앨때는 대괄호 안에 해당 인덱스를 써 넣습니다. s.drop(['d','e']) 하지만 이런다고 s에서 완전히 없어진건 아닙니다. 원본 데이터는 그대로 둔채 drop된 새로운 데이터로 추가로 생성되는 방식이기 때문입니다. s를 다시 부르면 d,e가 사..
Bool을 이용해 Series에서 조건에 해당하는 값을 불러보겠습니다. 먼저 Series를 이용해서 Bool타입을 나타내보겠습니다. import numpy as np import pandas as pd s = pd.Series(np.arange(10),np.arange(10)+1) s 인덱스 구분을 위해 인덱스는 1부터 시작하게 했습니다. 여기서 4보다 큰 값을 Bool로 구분해보겠습니다. s>4 True, False로 구분했습니다. 이걸 Series s에 적용시켜 값이 나오도록 하겠습니다. List와 똑같은 방식으로 하면 됩니다. s[s>4] 대괄호 안에 bool타입을 넣으면 조건에 맞는 값(True)만 나옵니다. 이런 식으로 조건의 맞는 값을 가져올 수 있습니다. 그런데 Series는 index도 저..
Series 로도 연산이 가능합니다. Series는 인덱스를 정할 수 있었기 때문에 그 부분을 생각하고 ndarray에서 하던식으로 하면 연산이 잘 됩니다. 다만 주의할점은 짝이 맞아야 된다는 것인데 짝이 맞지 않으면 NaN으로 출력하게 됩니다. import numpy as np import pandas as pd s1 = pd.Series([1,2,3,4],['a','b','c','d']) s2 = pd.Series([4,2,3,1],['d','b','c','a']) s1+s2 s2의 value 값의 순서를 바꿔도 그에 대응하는 인덱스값을 설정을 해놓으면 Series에서는 인덱스에 대응하는 value 값으로 연산을 하게 됩니다. 가능한 연산을 살펴보겠습니다. 먼저 사칙연산 가능합니다. print(s1-..
Series의 정보를 추출하는 간단한 함수를 알려드릴까 합니다. 다음과 같은 함수를 쓰면 Series의 형태를 파악할 수 있습니다. 물론 더 많이 있지만 주요한 것만 소개하겠습니다. size : Series의 원소 개수를 알려줌 shape : 튜플형태로 shape를 알려줌 unique : 유일한 값만 ndarray로 반환해서 출력 count : NaN을 제외한 원소 개수를 알려줌 mean : NaN을 제외한 평균(numpy와 다르게 계산가능) value_counts : NaN을 제외하고 각 값들의 빈도를 출력 head : 상위 n개 출력 기본값은 5개 tail : 하위 n개 출력 기본값은 5개 import numpy as np import pandas as pd numpy와 pandas를 임포트하고 시작..
Pandas에 대해서 알아볼까 합니다. Pandas는 데이터 다룰 때 많이 쓰고 있고 데이터 사이언스를 하는데 있어서 반드시 잘 다루어야 하는 모듈 중에 하나이고 기본중의 기본 모듈이기도 합니다. 사실 파이썬에서도 리스트,튜플,딕셔너리를 가지고 데이터를 다룰 수 있습니다. 파이썬의 특유의 직관성 때문에 이런 자료구조를 다루는 것만으로도 굉장히 편리합니다. 그런데 좀 더 효율적인 부분을 생각한다면 pandas가 파이썬에 기본으로 내장되어 있는 것보다는 더욱 효율적인 작업을 할 수 있습니다. 그렇다고 Pandas만 주구장창 쓰는 건 아니고 필요에 따라서 리스트도 쓸 때도 있고 pandas에 있는 자료구조도 쓸수 있습니다. 그저 더욱 편리하고 잘 다룰 수 있는 방법을 추구하는 것 뿐입니다. Pandas에는 두..