[python] pandas 사용예
Pandas
데이타 가져오기
html, database, excel, csv 등 다양한 방식으로 저장된 데이타를 pandas의 dataFrame 형태로 가져올 수 있다.
import pandas as pd
df = pd.read_html('https://onstory.fun/page', header=0, encoding='utf-8')
> 결과 출력 : [데이터프레임(표1), 데이터프레임(표2), 데이터프레임(표3)]
match
원하는 내용이 들어있는 표만 가져오기
match = 여러 테이블 중 특정단어가 들어간 테이블 만 가져온다.
pd.read_html('https://onstory.fun/page', match = '주가', header=0, encoding='utf-8')
set_index()특정 열을 행 인덱스로 설정
판다스에서 데이터를 행단위로 가져오려면 판다스에서 제공하는 함수를 사용해야 합니다. 제공하는 함수는 아래와 같이 두가지입니다.
DataFrame 만들기
위의 참조 문서인 "데이타 가져오기" 를 통해서도 DataFrame 형식으로 전환도 가능하지만 아래처러 만들수도 있다
df = pd.DataFrame(columns=range(11))
# 결과
Empty DataFrame
Columns: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Index: []
data = [
['2023-12-18',208500,212000,207000],
..........
['2024-01-18',186700,188700,184400],
]
df = pd.DataFrame(data)
_append (데이타 추가하기)
df = pd.DataFrame()
# df = df.append( pd.DataFrame([['2024-01-01', 1000]]), ignore_index=True) # 2.x 미만
df = df._append(pd.DataFrame([['2024-01-02', 2000]]), ignore_index=True) # 2.x 이상
# 결과
0 1
0 2024-01-01 1000
1 2024-01-02 2000
DataFrame
pandas 결과물은 DataFrame 형식으로 저장되는데 이 부분을 처리하는 방법에 대해 간략하게 설명 드립니다.
DataFrame['ColumnName']
DataFrame['ColumnName'] # ColumnName 에 속하는 모든 데이타
DataFrame.head(n)
상위 n개의 행 불러오기
DataFrame.head(2) # 상위 2개의 행 불러오기
DataFrame.tail(n)
하위 n개의 행 불러오기
DataFrame.tail(2) # 하위 2개의 행 불러오기
DataFrame.shape
행, 열 개수 확인
DataFrame.columns
컬럼 이름을 변경하거나 가져올 수 있다
df = pd.DataFrame()
df = df._append( pd.DataFrame([['2024-01-01', 1000]]), ignore_index=True)
df = df._append(pd.DataFrame([['2024-01-02', 2000]]), ignore_index=True)
df.columns = ['Date', 'Close']
# 결과
Date Close
0 2024-01-01 1000
1 2024-01-02 2000
loc 및 iloc
iloc는 integer location의 약어로, 데이터 프레임의 행이나 컬럼의 순서를 나타내는 정수로 특정 값을 추출해오는 방법이다.
loc는 컬럼명을 직접 적거나 특정 조건식을 써줌으로서 "사람이 읽기 좋은 방법"으로 데이터에 접근
iloc는 숫자 로서 데이터 위치(순서)를 적음으로서 "컴퓨터가 읽기 좋은 방법"으로 데이터에 접근
DataFrame.loc[]
인덱스 기준으로 행row) 데이터 읽기
loc[0] # 0번행
loc[0, 'Name'] # 0번행의 Name 이라는 칼럼의 값
loc[:, :] # 전체행, 전체열
loc[:, 'Name'] # Name 칼럼의 모든 값, df['Name']과 동일
loc[:4, :'Name'] # 4번행까지 그리고 'Name' 이라는 컬럼값 이전의 모든 컬럼
cond = DataFrame['Name'] == 3
df.loc[cond] // Name이 3인 모든 것 출력
df.loc[df['Name'] == 3]"
df.loc[(df['Pclass'] == 3) | (df['Age'] > = 30)]
DataFrame.iloc[]
행(row) 번호를 기준으로 행row) 데이터 읽기
integer location 약어로 행이나 칼럼의 순서를 나타내는 정수
iloc[0] : 0번열
iloc[1, 10], 1번행 10번칼럼
iloc[:5, :5], 0~5번째 까지의 행, 0~5번째 까지의 컬럼
iloc[::2, :], 행은 2간격으로(짝수), 열은 전체
pd version >= 2.x
2.x 이상에서는 아래 처럼 iteritems 대신에 items 를 사용한다.
for index, column in df.items(): # 하나의 컬럼씩 분리
print(index, column)
for index, row in df.iterrows():
pd version < 2.x
for index, column in df.iteritems(): # 하나의 컬럼씩 분리
print(index, column)
for index, row in df.iterrows():
df[:3] # 앞에서 부터 3개를 가져온다.
df[::-1] # 뒤에서부터 모두 가져온다.(역순정렬)
DataFrame.assign()
assign메서드는 DataFrame에 새 열을 할당하는 메서드입니다.
할당할 새 열이 기존열과 이름이 같을경우 덮어씌워집니다.
fast = df['close'].ewm(span=fast, min_periods=fast - 1, adjust=True).mean()
slow = df['close'].ewm(span=slow, min_periods=slow - 1, adjust=True).mean()
df = df.assign(fast=fast, slow=slow,).dropna() # 기존 DataFrame에 fast, slow 컬럼을 추가하고 데이타를 assign 한다.
DataFrame.sort_values()
DataFrame의 필드를 정렬할때 사용가능하다.
df.sort_values(by=['ymd'], ascending=True)
astype
형 타입 변경
df[['open', 'high', 'low', 'close']] = df[['open', 'high', 'low', 'close']].astype(int)
min
최소값을 구할때 사용한다.
- axis : 어느 축을 기준으로 계산할 것인가를 정의한다.
- 0 : y축 (Column을 계산)
- 1 : x축 (Row를 계산)
df.min(axis=0)
df['Close'].min(axis=0)
max
최대값을 구할 때 사용한다.
df.max(axis=0)
df['Close'].max(axis=0)
- min, max와 유사한데 min, max를 사용할 경우 직접 데이타를 가져와서 처리할때 한다.
- [{low: ... hiogh: ...}, {low: ... hiogh: ...}, .....]
maxV = max(prices, key=lambda x: x['high'])
minV = min(prices, key=lambda x: x['low'])