빈 데이터프레임 만드는 방법입니다. 기본적으로는 필수성분인 index와 column을 추가해주면 됩니다. import pandas as pd df = pd.DataFrame(index=range(0,원하는갯수), columns = {'column1','column2',...}) index, column 없이 빈 데이터프레임 만든다면.. index와 column을 안 쓰고도 생성할 수 있습니다. empty_df = pd.DataFrame() index와 column이 없는 상태가 되면 다른 데이터프레임을 합칠때 주의를 기울여야 합니다. 간단하게 다른 데이터프레임과 합치려면 append나 concat을 이용하면 합칠 수 있습니다. join, merge는 안 됩니다. df = pd.DataFrame({'col..
데이터 작업을 하다보면 다른 행과 계산할 경우 shift를 이용해 해결할 수 있습니다. for문으로 인덱스를 일일히 돌리지 않아도 되고 필요에 따라 컬럼을 추가해서 눈으로 확인해도 되지만 다른 행과 계산하려고 일일히 컬럼을 추가하는 번거로움을 줄일 수 있습니다. shift() period에 넣은 값만큼 행이 밀립니다. 행전체를 아래로 내리고 싶다면 양의정수를 넣고 위로 올리고 싶다면 음의 정수를 넣습니다. 특정 컬럼을 넣고 싶다면 특정 컬럼만 shift를 진행합니다. 확인을 위해 새로운 컬럼을 만들어 Open 값을 아래로 내린 값을 넣겠습니다. df df['Open_shift'] = df['Open'].shift(1) Open_shift라는 컬럼에 Open 값이 하나씩 내려왔습니다. 바로 전 행과의 계산..
데이터 프레임을 병합하는 과정에서 중복한 데이터를 빼고 병합하고 싶은 경우가 생길 수 있습니다. merge, concat, join도 병합 메쏘드 중에 하나인데 중복이 있고 column이 똑같은 데이터프레임의 병합에서는 문제가 발생할 수 있습니다. 이는 각각의 메쏘드의 특징이 달라서인데요. merge는 서로 다른 column일 때 합치기 편하고 concat과 append는 row를 하나씩 추가하는 방식입니다. join은 인덱스를 기준으로 column으로 합쳐나가는 방식입니다. 만약 데이터프레임 A와 B의 column은 같은데 중복데이터만 없애고 합치고 싶다면 모든 메쏘드가 적절하지 않을 수 있습니다. 왜냐하면 key가 중복된 상황에서 merge를 하게 되면 merge는 key에서 가능한 모든 경우의 수를..
notna와 notnull을 이용하여 결측치가 아닌 값을 찾는 방법입니다. isin이나 isna로 하는 게 더 편하긴 하지만 쓰기 나름이라서 누군가는 필요할 수도 있으니 일단 포스팅을 하겠습니다. 예제로 데이터프레임을 하나 만들겠습니다. df = pd.DataFrame(dict(level=[1,2,3,4,5,np.nan],age=[12,13,18,20,np.nan,23])) df notna 와 notnull 의 기능 notna 와 notnull 은 isna와 반대로 결측치가 아닌 값을 찾아내는 기능을 가지고 있습니다. 그래서 bool로 출력이 되는데 결측치에는 False로 나오게 됩니다. df_notna = pd.notna(df) df_notna df_notnull = pd.notnull(df) df_n..
데이터프레임의 로우와 컬럼을 바꾸는 방법입니다. 넘파이에서 transpose 하는 방법과 동일합니다. T 를 이용합니다. df를 다음과 같이 만들었습니다. df 로우와 컬럼을 바꿔보겠습니다. df.T 인덱스가 설정되어 있으면 인덱스의 내용이 위로 올라가게 됩니다. df2= df2.set_index('Name') df2.T 멀티인덱스로 해도 똑같이 적용됩니다. 인덱스에 들어가는 내용이 컬럼으로 됩니다. df2= df2.set_index(['Name','Gender']) df2.T 컬럼을 확인해보면 다음과 같이 멀티인덱스로써 이루어져 있는 걸 볼 수 있습니다. df2_T = df2.T df2_T.columns 관련 포스팅 [Python/Pandas] - [Pandas] 데이터프레임 멀티인덱스 다루기(loc,..
크롤링을 하거나 데이터를 받았는데 문자열과 기호가 섞여 있는 경우가 있습니다. 판다스에는 따로 그런걸 할 수 있는 메쏘드는 없고 기본 지식을 이용해 컬럼을 쪼개봅시다. 예를 들어 중간고사 점수 데이터를 받았는데 다음과 같이 한 덩어리로 주었다고 합시다. import pandas as pd df = pd.DataFrame({'Mid-term': ['Anne:M:100:A', 'Peter:F:50:C', 'Max:M:90:B']}) df 황당무계한 데이터를 보기 좋게 컬럼을 자르려고 하는 겁니다. 판다스의 메쏘드가 없으니 만들어 합시다. 문자열을 ':'로 나누고 데이터프레임도 나눠진 문자열만큼 컬럼을 만들어 냅니다. 먼저 문자열을 나눠야 하니 split() 이용합니다. 그리고 컬럼에 넣어야 하니 리스트로 반..
판다스에서 멀티인덱서 다루는 방법입니다. 제가 이전에 groupby에 대해 써놓은 게 있는데 그 상황에서 멀티인덱서를 다뤄보겠습니다. 두가지 방법으로 loc,xs가 있긴 하지만 사실상 실제적으로 많이 쓰는 건 xs입니다. loc인 경우 싱글인덱스일때 쓰는 방식인데 그걸 멀티인덱스에 그대로 적용하면 한계가 있습니다. 하나씩 살펴보겟습니다. 먼저 데이터를 불러오겠습니다. df 일단 Quarter와 Month odd_even 을 멀티인덱스로 잡으면 다음과 같이 나옵니다. groups_two = df.groupby(['Quarter','Month odd_even']) multi_index = groups_two.first() multi_index 인덱스를 봐도 멀티인덱스로 되어있습니다. multi_index.i..
판다스가 어느 포맷들을 불러올 수 있는지 정리합니다. 불러올 수 있다는 것이 의미하는 건 일종의 변환이라 판다스로 펼쳐놓으면 판다스처럼 쓸수 있는 것을 의미합니다. 판다스를 잘 쓰는 사람들에게는 판다스가 많은 확장자 파일을 다룰 수 있으면 여러모로 편리하게 쓸수 있지 않을까 싶습니다. 저장과 불러오는 방법을 엑셀 파일로 들면 df를 저장할 데이터프레임이라 하면(이름 정의를 꼭 df로 할 필요는 없습니다) 저장할 때는 df.to_excel('경로'/'파일이름.xlsx') 불러올 때는 df = pd.read_exel('경로/파일이름.xlsx') 입니다. 다른 확장자인 경우는 아래 표에 적어놓았습니다. Format Input Output CSV pd.read_csv() .to_csv() xls/xlsx pd...
데이터프레임을 정렬하는 방법입니다. 데이터프레임은 인덱스(index)와 컬럼값(value)이 있는데 그에 맞게 정렬을 할 수 있습니다. 인덱스 정렬을 하려면 sort_index() 메쏘드를 컬럼의 값 정렬을 위해서는 sort_value() 메쏘드를 쓰면 됩니다. 분류기 머신러닝이나 인공지능 입문자들이 많이 쓰는 연습용 데이터셋인 아이리스 데이터셋으로 해보겠습니다. 아이리스 데이터셋을 다루는게 목적이 아니니 설명은 생략하겠습니다. 필요한 것만 하겠습니다. 데이터 셋팅 import pandas as pd from sklearn.datasets import load_iris iris = load_iris() df = pd.DataFrame(data=iris.data,columns = iris.feature_n..
논문이 끝난 줄 알았는데 어디에 내야한다며 영어를 아주 제대로 해오라는 교수님의 말씀에 저의 모든 계획이 무너지고 있습니다. 더 잘 만들어서 포스팅을 하려고 했는데 좀 아쉽지만 어쨋든 이번 포스팅에서는 판다스의 rolling을 이용한 분석 예제을 할까 합니다. 영원히 안 올릴 수도 있을 것 같아서 준비가 덜 되었지만 맛보기로 올립니다. 이게 코딩이라기보다 금융 데이터 분석에 가까워서 카테고리에 안 맞을 수 있습니다. 어쨋든 앞선 포스팅에서 이동평균선을 rolling으로 구했었는데 이걸 가지고 다양한 각도에서 볼 수 있는 통계적 분석을 할까 합니다. CJ제일제당의 데이터를 가지고 해보겠습니다. 편의를 위해 날짜와 종가만 가지고 오겠습니다. df 통계 수치 window를 20으로 해서 할 수 있는 몇가지 통..
데이터프레임의 타입을 바꾸는 방법입니다. 사용 데이터는 국내 etf인 kosdaq 150 레버리지의 가격입니다. df.head() 데이터프레임 타입 확인하기 데이터프레임 타입을 확인하려면 dtypes를 이용합니다. df.dtypes 각 컬럼의 타입이 나옵니다. 지금 df 같은 경우 날짜만 datatime64[ns] 이고 나머지는 int64 입니다. 데이터프레임 타입 전체 한꺼번에 바꾸기 모든 타입이 같을 때는 df.astype('타입')을 하면 바뀌기 때문에 간단합니다. 물론 무조건 되는 건 아니고 서로 바뀔 수 있는 타입이라는 가정에서 된다는 얘기입니다. astype이 만능키가 아님을 강조합니다. astype은 다루기 쉬우니깐 요령 하나를 알려드릴까 합니다. 타입이 다른게 섞여있을 때 데이터프레임을 분..
데이터프레임의 column의 이름을 바꾸는 방법입니다. column 이름바꾸기 df 국내 ETF인 kosdaq 150 레버리지입니다. df로 놓겠습니다. df의 column을 보면 한글로 되어있습니다. 작업을 편하게 하기 위해서 한글로 된 column 이름을 Date,Open,High,Low,Close로 바꾸려고 합니다. column 전체 이름 한꺼번에 바꾸기 전체 column의 이름을 바꾸고 싶다면 df.columns로 바로 할 수 있습니다. df.columns를 요청하면 다음과 같이 리스트형식 비슷하게 나옵니다. df.columns columns들을 바꾸기 위해서 다음과 같이 합니다. df.columns = ['Date','Open','High','Low','Close'] df 근데 이건 모든 걸 다..
데이터프레임의 데이터가 많으면 원하는 자료를 눈으로 찾기가 어려운데 흔히 하는 찾기(ctrl+f)기능과 같은 역할을 하는 str.contains()를 소개하겠습니다. 예제 자료는 국내의 etf 종목리스트입니다. listing이라고 합시다. listing 468개의 종목이 있지만 내가 원하는건 레버리지가 붙은 종목인데 찾을수가 없습니다. 이럴 때 '레버리지' 만 가지고 종목을 찾아보고 싶을때 str.contains()을 씁니다. str.contains() 타입 일단 str.contains()만 했을때 어떤 타입이 나오는지 확인해보겠습니다. 이 함수는 column을 대상으로 찾는 기능이므로 찾을 대상을 column으로 지정하고 해야합니다. listing['Name'].str.contains('레버리지') b..
join() 함수를이용한 데이터프레임 합치기입니다. join()은 인덱스를 기준으로 왼쪽으로 순차적으로 연결되는 방식입니다. 어떤 인덱스를 기준으로 하느냐에 따라 배열이 달라집니다. df1= pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d']) df2 = pd.DataFrame({'B':[15,25,35,45]},index=['b','c','g','f']) 예를 위해 df1과 df2의 인덱스 중 2개만 같게 했습니다. b,c가 같습니다. df1.join(df2) 먼저 df1으로 join을 하면 df1의 인덱스를 따라서 df2가 붙여지게 됩니다. df2의 b,c 값은 나오고 나머지 값은 NaN로 나오게 됩니다. df2.join(df1) df2를 기준으로 하..
데이터프레임 합치는 방법인 append와 concat에 대해서 알아보겠습니다. 가장 기초적인 방법이고 단순한 결합입니다. 값이 없으면 결측치로 처리하고 마는 방법입니다. 빠르기로 치면 append가 가장 빠르지 않나 싶은데 저도 실제로 작업을 할때 append랑 merge를 주로 쓰게 되는 것 같습니다. append 여기저기서 나타나는 append부터 보겠습니다. 친숙한 메쏘드라 어려움은 없습니다. column을 기준으로 배열이 좌우된다는 것만 기억하고 하면 됩니다. df1 = pd.DataFrame({'A':[10,20,30,40]},index=['a','b','c','d']) df2 = pd.DataFrame({'A':[10,20,30,40]},index=['e','f','g','h']) df3 = ..