[파이썬] Pandas와 DataFrame

2022. 12. 23. 17:28자격증(다다익선)/파이썬

728x90

https://chanytv.tistory.com/137

 

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문

[파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크롤링 한 번 해보자고 시작한 파이썬 공부다. 모든 공부는 기초가 중요한 법!! 이 번 공부로 파

chanytv.tistory.com

https://chanytv.tistory.com/138

 

[파이썬] 스크래핑(크롤링)

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

https://chanytv.tistory.com/139

 

[파이썬] openpyxl / 파일 업로드, 다운로드

https://chanytv.tistory.com/137 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 [파이썬] 변수&기본연산 / 리스트,딕셔너리 / 함수 / 조건문 / 반복문 파이썬 기초를 시작하면서.... 크

chanytv.tistory.com

[파이썬] Pandas와 DataFrame


Pandas는 일종의 파이썬용 Excel 개념 인 듯하다. Pandas의 DataFrame를 이용하면 Excel 형식처럼 만들 수 있다.

일단 작업을 하려면 역시나 환경 구성을 해줘야 한다.

import pandas as pd
import numpy as np

pandas와 numpy를 불러왔다. 넘파이는 찾아보니 'Numerical Python'의 줄임말이라 한다.  뜻 그대로 '수의 관한 파이썬'이다. pandas도 찾아보니 'Panel Data System'이라고 한다.

 

기초적인 구문으로 테스트를 해보자.

data = {
    'name' : ['영수','철수','영희','소희'],
    'age' : [20,15,38,8]
}

df = pd.DataFrame(data)

# 행 추가하기
doc = {
	'name':'세종',
	'age':14,
}
df = df.append(doc,ignore_index=True)

# Colums 추가하기
df['city'] = ['서울','부산','부산','서울','서울']

# 특정 Column만 뽑아보기
df[['name','city']]

# 원하는 조건에 맞는 행만 뽑아보기
df[df['age'] < 20]

# 특정 행에서의 뽑아보기
df.iloc[-1,0] # 마지막 행
df.iloc[0,0] # 첫 행

 

쓰다보면 익숙해지겠지만, 특정 cloumn을 뽑아내는 방식은 암기가 필요하다고 한다. 대괄호 두 번.

다 쓰긴 쓰지만 뭣보다도 마지막 '특정 행에서의 뽑아보기'를 가장 많이 쓴다고 하니 암기가 필요할 듯하다.

iloc = integer location = 정수 로케이션

df.sort_values(by='age',ascending=True)

엑셀을 좀 다루다 보니 뭣보다도 가장 많이 쓰는 요소 중에 하나는 역시나 정렬이다.

해당 구문은 필히 암기를 해야 할 듯하다. 

 

True = 내림차순 / False = 오름차순  |  ※앞에 대문자 안 하면 오류남.※

sort_ values = 분류 값

 

# 조건에 맞는 열을 추가하기

np.where(df['age'] > 20,'성인','청소년')

df['is_adult'] = np.where(df['age'] > 20,'성인','청소년')

 

더불어 정렬만큼이나 많이 사용하는 것이 특정 조건의 값을 추가하는 기능 이 또한 필히 암기를 해야 할 듯하다.

 

그 외에 많이 쓰는 구문들은 아래와 같다.

df['age'].mean()

df['age'].max()

df['age'].min()

df['age'].count()

똑같은 결과 값을 불러오더라도 방식을 여러 가지다. 아래 내용 참고

# 서울에 사는 사람 중 나이가 가장 많은 사람은 몇 살?

# 1
df[df['city'] == '서울']['age'].max()

# 2
df[df['city'] == '서울'].sort_values(by='age',ascending=False).iloc[0,1]

'=='은 이미 '='을 코드에서 사용 중이라 '=='형태로 쓴다고 한다.

 

엑셀의 내용을 복붙 하면 당연히 구문이 엉망이 될 것이다. 그래서 pandas에서는 엑셀을 불러올 때 아래와 같은 명령어를 사용해야 한다.

pd.read_excel('종목데이터.xlsx')

df = pd.read_excel('종목데이터.xlsx')

df.head() # 위에서부터 아래로

df.tail() # 아래에부터 위로

df.head(20) # 위에서부터 20개만
df.tail(20) # 아래에서부터 20개만

소수점 아래 반올림도 있다 아래 코드 참조

pd.options.display.float_format = '{:.2f}'.format

아마 '{;.2f}'에서 숫자만 변경하면 셋째, 넷째 반올림 가능 할 듯하다. (아직 안 해봄.)

 

기초적인 기능은 여기까지다. 이 기능들만 알면 아래처럼 다양한 값들을 쉽게 불러올 수 있다.

(막상 써보니 엑셀보다 더 편하게 값을 도출할 수 있는 부분도 많은 것 같다.)

# 어제 오른 종목들만 골라보기
	df[df['change_rate'] > 0]

# per가 0 인 종목들을 제거하기
	df = df[df['per'] > 0]

# 순이익, 종가를 추가하기
	df['earning'] = df['marketcap'] / df['per']
	df['close'] = df['per'] * df['eps']

# date 컬럼을 없애기
	del df['date']

# pbr < 1 & 시총 1조 이상 & per < 20 을 추려보기
	cond = (df['marketcap'] > 1000000000000) & (df['pbr'] < 1) & (df['per'] < 20)
	df[cond]

# 시총이 큰 순서대로 보기
	df[cond].sort_values(by='marketcap', ascending=False)

# 평균, 표준편차 등의 정보를 보기 (함께하기)
	df[cond].describe()
728x90