1번째 줄: |
1번째 줄: |
| ==개요== | | ==개요== |
− | 판다스. 금융데이터 분석을 목적으로 개발됨. panel data와 python data analysis에서 유래했다. | + | 판다스. 금융데이터 분석을 목적으로 개발됨. panel data와 python data analysis에서 유래했다. 별칭은 pd. |
| | | |
| C언어로 작성되어 처리속도가 빠르다. | | C언어로 작성되어 처리속도가 빠르다. |
56번째 줄: |
56번째 줄: |
| |df = pandas.DataFrame({'행이름': 시리즈, '행이름2': 다른df['행이름']}) | | |df = pandas.DataFrame({'행이름': 시리즈, '행이름2': 다른df['행이름']}) |
| |}<br /> | | |}<br /> |
− | =데이터프레임. DataFrame.=
| |
− | 2차원 구조의 데이터를 다루기 위한 도구.
| |
| | | |
− | ===선언 및 데이터 추가===
| + | <br /> |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | |-
| |
− | |선언
| |
− | |가장 쉬운 방법은 사전을 이용한 선언.<syntaxhighlight lang="python">
| |
− | 데이터프레임 = DataFrame({'열이름1':[1,2,3,4,5]
| |
− | '열이름2':[6,7,8,9,10]
| |
− | '열이름3':[10,9,8,7,6]
| |
− | index = 리스트 })
| |
− | </syntaxhighlight>각자의 열은 시리즈 객체로 존재한다. index옵션은 없어도 된다.
| |
− | |-
| |
− | |칼럼 순서 바꾸기
| |
− | |<syntaxhighlight lang="python">
| |
− | 데이터프레임2 = DataFrame(데이터프레임1, columns=[열이름1, 열이름2, ...])
| |
− | </syntaxhighlight>
| |
− | |-
| |
− | |열 추가
| |
− | |데이터프레임.insert(추가될 위치, "열이름", 붙일데이터)
| |
− | | |
− | 보통 가장 뒤에 붙여 추가될 위치에 len(데이터프레임.columns)를 넣는다.
| |
− | |-
| |
− | |행 추가(리스트로)
| |
− | |열 갯수와 동일한 리스트를 행에 붙인다.
| |
− | 데이터프레임.loc["새로운인덱스"]=['값1', '값2', ...]
| |
− | | |
− | 보통, 가장 뒤에 붙이기 위해 len(데이터프레임.index)을 넣는다.
| |
− | |-
| |
− | |행 추가(사전으로)
| |
− | |열 이름과 매칭시킨 사전을 붙인다.
| |
− | 데이터프레임.loc["새로운인덱스"]={"열이름1":'값1', '열이름2':'값2', ...}
| |
− | |}
| |
− | | |
− | ===열 조작===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |열 리스트 얻기
| |
− | |df.columns
| |
− | |어떤 칼럼이 있는지 알려준다.
| |
− | |-
| |
− | |열 이름 바꾸기
| |
− | |데이터프레임.rename(columns={'구이름':'신이름', '구이름2':'신이름2'}, inplace=True)
| |
− | |inplace=True 이 옵션이 뭔진 모르겠네;; 없어도 잘 되긴 한다.
| |
− | |-
| |
− | |열 순서 바꾸기 및 추출
| |
− | |df<nowiki>[['열이름1', '열이름2']]</nowiki>
| |
− | |열이름에 해당하는 순서로 해당 열들만 추출된다.
| |
− | |-
| |
− | |열 제거
| |
− | |df = df.drop(columns='열이름')
| |
− | |
| |
− | |-
| |
− | |열 붙이기
| |
− | |df['새로운 칼럼'] = 칼럼
| |
− | |행의 크기가 같은 칼럼을 붙일 수 있다.
| |
− | |-
| |
− | |새로운 칼럼 만들기
| |
− | |df['새 칼럼'] = df['열이름'].rank()
| |
− | |크기가 같은 칼럼을 만든 후 덧붙일 수 있다.
| |
− | |-
| |
− | |같은 인덱스를 사용하는 데이터의 열 추가.
| |
− | |df = pd.merge(df1, df2, how='옵션', left_index=True, right_index=True)
| |
− | |
| |
− | {| class="wikitable"
| |
− | !옵션
| |
− | !의미
| |
− | |-
| |
− | |how
| |
− | |inner : 양쪽에 모두 있는 인덱스만 합친다.
| |
− | outer : 한쪽에만 있는 인덱스라도 합친다
| |
− | |-
| |
− | |left_index = True
| |
− | |좌측의 인덱스 기준으로 합친다.
| |
− | |-
| |
− | |right_index = True
| |
− | |우측 기준. 거의 양쪽 다 True 옵션을 준다.
| |
− | |}
| |
− | |-
| |
− | |이중칼럼 만들기
| |
− | |columns = [['1열이름']*len(df), df.columns]
| |
− | |columns 명령에 리스트 하나면 속성(칼럼) 한 줄이 되지만, 여기에 2차원리스트를 넣으면 2중, 3중 속성을 만들 수 있다.
| |
− | |-
| |
− | |이중칼럼 접근
| |
− | |df[('상위칼럼','하위칼럼')]
| |
− | |
| |
− | |}
| |
− | | |
− | ===인덱스 조작===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |인덱스를 데이터화
| |
− | |데이터프레임.reset_index
| |
− | |숫자 인덱스가 아닌 경우 사용. 인덱스 목록을 뽑아낼 때의 사전작업.
| |
− | (엑셀에서 불러왔을 때 필요하다.)
| |
− | |-
| |
− | |인덱스리스트 얻기
| |
− | |list(데이터프레임['''<nowiki/>'인덱스열이름''''])
| |
− | 데이터프레임.index
| |
− | |위에서 얻은 인덱스 열이름을 기입해 넣거나('''<nowiki/>'Unnamed: 0'),'''
| |
− | 바로 인덱스를 불러오기.(둘 다 시도해 볼 것.)
| |
− | |-
| |
− | |인덱스 이름 바꾸기
| |
− | |데이터프레임.rename(columns={'index':'신이름'})
| |
− | |
| |
− | |-
| |
− | |데이터 크기 살피기
| |
− | |len(df.index)
| |
− | |
| |
− | |-
| |
− | |인덱스 이어붙이기(행 합치기)
| |
− | |df = pd.concat([df1, df2, df3,...])
| |
− | |이렇게 쓰면 인덱스들을 이어붙인다.
| |
− | |}
| |
− | | |
− | ===데이터 접근===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |칼럼 접근
| |
− | |데이터프레임["열이름"]
| |
− | |
| |
− | |-
| |
− | |행접근
| |
− | |데이터프레임.loc["인덱스"]
| |
− | |데이터프레임.index['인덱스']형태로 접근도 가능하다.
| |
− | loc을 쓰지 않으면 하위속성(칼럼)에서 해당 속성을 찾는다.(열 선택)
| |
− | |-
| |
− | |행접근(정수인덱스)
| |
− | |df.iloc[정수]
| |
− | |순서에 따른 정수인덱스를 사용할 수 있다.
| |
− | |-
| |
− | |칼럼목록
| |
− | |데이터프레임.columns
| |
− | 칼럼목록을 얻는다.
| |
− | |
| |
− | |-
| |
− | |행목록
| |
− | |데이터프레임.index
| |
− | 인덱스 목록을 얻는다.
| |
− | |
| |
− | |-
| |
− | |특정 데이터 접근
| |
− | |데이터프레임['열이름'][숫자]
| |
− | |열 이름의 '숫자'번째 요소에 접근한다.
| |
− | 한 줄일지라도 시리즈 형태로 반환한다.
| |
− | | |
− | 그 시리즈에서 하위 속성에 접근하는 방식이다.
| |
− | |-
| |
− | |특정 데이터 접근2
| |
− | |df['열이름']['찾을내용']
| |
− | |열을 찾은 후 해당 내용을 찾는다.
| |
− | |-
| |
− | |특정 데이터 접근3
| |
− | |df.loc['행이름']['열이름']
| |
− | |행을 찾고 열을 찾는다.
| |
− | |-
| |
− | |상위 5개 데이터 확인
| |
− | |데이터프레임.head()
| |
− | |
| |
− | |-
| |
− | |조건 인덱싱1
| |
− | |[데이터프레임['열이름'] > 숫자]
| |
− | |숫자 이상의 값을 가진 값만 추출한다.
| |
− | 이외 == 등의 조건으로 인덱스를 추출할 수 있다.
| |
− | | |
− | 인덱스가 조건을 통과했는지 여부를 True, False로 보여준다.
| |
− | | |
− | | |
− | df['열이름']>100 을 하면 이에 해당되는 인덱스를 뱉어낸다. 때문에 df[df['열이름']>100] 형태로 해당하는 데이터를 뽑아낼 수 있다.
| |
− | |-
| |
− | |조건 인덱싱2
| |
− | |데이터프레임 = 데이터프레임[데이터프레임['열이름']
| |
− | |조건에 맞는 행만 살린다.
| |
− | |-
| |
− | |
| |
− | |
| |
− | |
| |
− | |}
| |
− | | |
− | ===전체 틀 조작===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |데이터프레임 정렬
| |
− | |데이터프레임.sort_values(by = '열이름', ascending = True)
| |
− | |ascending 옵션이 True면 오름차순
| |
− | |}
| |
− | ===데이터 조작===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !설명
| |
− | !예시
| |
− | |-
| |
− | |데이터 정렬
| |
− | |ascending = False를 추가하면 내림차순으로 정렬한다.
| |
− | |df = df.sort_values(by='열이름')
| |
− | |-
| |
− | |필터링
| |
− | |
| |
− | |
| |
− | |-
| |
− | |행간 연산
| |
− | |.shift(n) n에 해당하는 만큼 데이터를 밀어낸다.
| |
− | |df['열'] - df['열'].shift(1) 형식으로 해당 열의 전 값과 연산할 수 있다.
| |
− | |-
| |
− | |과거 데이터의 평균
| |
− | |적용할 함수로 숫자만큼의 과거데이터를 연산하여 만든다.
| |
− | 데이터프레임['열이름'].rolling(window=숫자).함수명()
| |
− | | |
− | 이후 열 추가 등의 처리를 해준다.
| |
− | | |
− | 여러 데이터의 평균을 구하거나 최대, 최솟값 찾기에 사용한다.
| |
− | |df2= df['열이름'].rolling(window=5).mean()
| |
− | |-
| |
− | |전치
| |
− | |df.T
| |
− | |행과 열을 바꾼다.
| |
− | |-
| |
− | |
| |
− | |
| |
− | |
| |
− | |}<br />
| |
− | ===데이터 검색===
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |인덱스 찾기
| |
− | |df[행이름 == 값]
| |
− | |해당 검색결과에 해당하는 인덱스를 구할 수 있다.
| |
− | df.열이름/ df.열이름['인덱스'] 형태의 연산도 가능하다.
| |
− | |}
| |
− | ===행 순회===
| |
− | <syntaxhighlight lang="python">
| |
− | for ntp in df.itertuples():
| |
− | ntp.속성명 + ntp.속성명2
| |
− | </syntaxhighlight>튜플화 하여 속성명으로 데이터에 접근해 연산이 가능하다.
| |
− | | |
− | ===데이터 형식===
| |
− | [다양한 형식이 있을 텐데.. 찾아 조금 채워보자.]
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |시계열 데이터로
| |
− | |df.index = pd.to_datetime(df.index)
| |
− | |20200322와 같은 숫자는 그냥 문자열로 취급된다. 이를 시계열로 인식되게 하려면 데이터 변환을 해주어야 한다.
| |
− | |-
| |
− | |숫자형데이터
| |
− | |df['열이름'] = pd.to_numeric(df['열이름'])
| |
− | |해당 데이터가 숫자임을 알려주는 것.
| |
− | |}<br />
| |
− | | |
− | =자료 읽어오기=
| |
− | | |
− | ==엑셀과 연동==
| |
− | 2차원 데이터를 다루는 가장 쉬운 방법은 엑셀을 이용하는 것. 저장하고 시각화 하는 데 엑셀을 이용한다면 굉장히 편리할 것이다.
| |
− | | |
− | 엑셀 관련기능을 사용하려면 관련 라이브러리를 설치해야 한다.
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |파일 불러오기
| |
− | |객체 = pandas.read_excel('''<nowiki/>'<nowiki/>'''c:\\경로.xlsx'''<nowiki/>'''')
| |
− | 객체 = pandas.read_csv('''<nowiki/>''''c:\\경로.csv')
| |
− | |pip install xlrd 따위의 라이브러리 설치가 선행되어야 한다.
| |
− | 저장했던 엑셀파일을 불러오면 저장한 df 그대로 사용되는 게 아니라, 엑셀의 제한된 기능에 따라 변형되기 때문에 칼럼을 다시 만져주어야 제대로 사용할 수 있다. 기본적으로 맨 윗줄을 칼럼 처리한다.(상관없으면 그냥 쓰고;)
| |
− | | |
− | 때문에 df['열이름'] = pd.to_numeric(df['열이름']) 형태로 데이터형을 다시 통일, 설정해주어야 한다.
| |
− | | |
− | | |
− | 인덱스 지정은 따로 하지 않는다. 'index_col=숫자' 옵션으로 인덱스를 지정할 수도 있다.
| |
− | | |
− | Sheet_name='시트명' 옵션으로 해당 시트를 열 수도 있다.
| |
− | |-
| |
− | |파일 저장하기
| |
− | |객체.to_excel('''<nowiki/>'<nowiki/>'''c:\\경로.xlsx'''<nowiki/>'''')
| |
− | 객체.to_csv('''<nowiki/>'<nowiki/>'''c:\\경로.csv'''<nowiki/>'''')
| |
− | |pip install openpyxl 따위의 라이브러리 설치가 선행되어야 한다.
| |
− | |}
| |
− | | |
− | ==html 표 불러오기==
| |
− | {| class="wikitable"
| |
− | !의도
| |
− | !방법
| |
− | !설명
| |
− | |-
| |
− | |데이터 불러오기
| |
− | |객체 = pandas.read_html('''h<nowiki/>t<nowiki/>ml 문서''')'''<nowiki/>'''
| |
− | |'''<nowiki/>'''html 문서의 데이터타입은 str이어야 한다. requests 등으로 웹문서를 불러와 변환해 넣으면 된다.
| |
− | |}표형 데이터는 쉽게 가져올 수 있다.<syntaxhighlight lang="python">
| |
− | page = requests.get(url)
| |
− | tables = pd.read_html(page.text)
| |
− | </syntaxhighlight> [굳이 .text 속성에 접근해야 하네;;? 그냥 객체와 text속성은 어떻게 다른지 보자.]
| |
− | | |
− | 여러 테이블이 있는 경우, 데이터프레임이 들어있는 리스트로 반환된다.<br />
| |
| | | |
| ==결측치 처리== | | ==결측치 처리== |