Pandas 라이브러리
데이터 처리, 분석을 위한 라이브러리로 행과 열로 이루어진 데이터 객체(데이터프레임)를 만들어 사용
설치
pip install pandas
라이브러리
import pandas as pd
시리즈(Series)
차원이 없는(행과 열의 구별이 없는) 배열 데이터
pd.Series([1,3,5,7])
pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])
값
a.values # array([1, 3, 5, 7], dtype=int64)
인덱스 (없을 시 숫자로 기본 인덱스 생성)
a.index # RangeIndex(start=0, stop=4, step=1)
b.index # ['a', 'b', 'c', 'd']
값마다 개수 count
series.value_counts()
++ 추가) pandas series 메서드
003. pandas series - 다양한 메서드들
먼저 pandas series에서 사용하는 다양한 연산 메서드를 알아보겠습니다. Series에서 바이너리 연산 메서드 Function 설명 add( ) Series에서 길이가 같은 객체 또는 Series를 더하는 데 사용되는 메서드 입니
hyun-am-coding.tistory.com
데이터프레임(DataFrame)
데이터프레임 생성
# 1) 인덱스 숫자 자동생성
list = []
df = pd.DataFrame(list)
# 2) 동일한 길이의 리스트, 인덱스 자동 생성
col_list1 = []
col_list2 = []
df = pd.DataFrame([x for x in zip(col_list1, col_list2)])
# 3) 동일한 길이의 리스트, 인덱스 지정
row_list = []
col_list1 = []
col_list2 = []
df = pd.DataFrame([x for x in zip(row_list, col_list1)])
# 3) 열 이름 지정
col_name_list = []
col_list1 = []
col_list2 = []
df = pd.DataFrame({'col1': col_list1, 'col2': col_list2, ... })
df = pd.DataFrame([col_list1, col_list2], columns=col_name_list)
# 4) 행(인덱스) 이름 지정
row_list = []
df = pd.DataFrame([col_list1, col_list2], index=row_list)
# 5) dict to df
df = pd.DataFrame(dict)
데이터프레임 정보
df.info()
데이터프레임 열단위 수치계산
df.max() # 최대
df.min() # 최소
df.count() # 개수
df.sum() # 합계
df.std() # 표준편차
df.mean() # 중간값
df.var() # 분산
데이터 요약 정보
df.describe() # count, max, std, min, Q1, Q2, Q3, max
데이터 읽어오기 (mode 옵션 생략 시 기본 r(read))
df = pd.read_excel('엑셀파일명.xlsx', encoding='utf-8')
df = pd.read_csv('csv파일명.csv', encoding='utf-8')
df = pd.read_json('json파일명.json', encoding='utf-8') # 그 외 다양
한글 인코딩
encoding = 'utf-8' / 'euc-kr' / 'cp949'
열 데이터 조회 (데이터프레임은 기본으로 열 우선, default 0)
df['col']
df[['col1', 'col2', ... ]
df.col1
행 데이터 조회 (axis=1)
df.loc[[index1, index2, ... ], : ]
데이터 조회 - 컬럼명에 리스트 형태 가능
df['col']['row'] # 열에 접근 후 Series의 index로 접근
df.loc['row']['col'] # 행에 접근 후 Series의 index로 접근
df.loc['row', 'col'] # 행 이름과 열 이름을 지정하여 접근 (loc 활용)
df.at['row', 'col'] # 행 이름과 열 이름을 지정하여 접근 (at 활용)
df.iloc[0, 7] # indexed-location 기반으로 index number 기준 행 & 열 지정하여 접근
행과 열 조회
df.head() # n=5(default)
df.head(n) # 상위 n개 행
df.tail() # n=5(default)
df.tail(n) # 하위 n개 행
새로운 열 추가
- 항상 기존의 데이터 행 수와 동일해야함
df['new_col'] = {data}
- 특정 행과 수식 이용
df['new_col'] = df['col'].apply(function) # lambda func 가능
- 원하는 위치에 새로운 열 추가
df.insert(index, 'new_col', {data})
새로운 행 추가
row_list1 = []
row_list2 = []
# 하나의 행 추가
df.loc['new_row'] = row_list
df.append({'row_name1' : row_data1 , 'row_name2' : row_data2, ...})
df.append({'row_name1' : row_data1 , 'row_name2' : row_data2, ...}, ignore_index=True) # index 추가x
# 여러 행 추가
df.append({'row_name1' : row_list1 , 'row_name2' : row_list2, ...})
열 삭제
del df['col']
행 삭제
df.drop('row') # inplace=False(default) 덮어쓰기x
df.drop('row', inplace=True)
[] 안에 조건이 포함될 때 해당 조건이 True인 행만 출력 (조건에 and, or, not 올 수 없음으로 &, |, ~ 사용해아함)
# ex1) 남성이 1, 여성이 2 일때 남성만 존재하는 데이터프레임 생성
df_male = df[df['gender'] == 1]
# ex2) 남성이 1, 여성이 2 일때 여성만 존재하는 데이터프레임 생성
df_male = df[~(df['gender'] == 1)]
# ex3) count가 1이상 10 미만인 행만 모아서 데이터프레임 생성
df_reacount = df[ (df['count'] < 10) & (df['count'] >= 1) ]
범주형 변수를 지닌 열에 대해 출현 빈도 계산
df.value_counts() # sort=True(default) 자동 정렬
df.value_counts(sort=False)
특정 열 기준 정렬
# ascending=True(default) inplace=False(default) 오름차순, 덮어쓰기x
df.sort_values()
df.sort_values(by='sort_col')
df.sort_values(by='sort_col', ascending=False) # 내림차순, 덮어쓰기x
df.sort_values(by='sort_col', ascending=False, inplace=True) # 내림차순, 덮어쓰기o
행(인덱스) 기준 정렬
df.sort(axis=1)
df.sort_index() # ascending=False, inplace=False (default)
데이터 변경
# 전체 데이터프레임 범위
DataFrame('old', 'new')
# Series(행이나 열) 범위
Series.replace('old', 'new')
Series.replace([old_list], [new_list]) # old_list, new_list 일대일 매칭
열 이름 변경
df.rename(columns = {'col1': 'new_col1', 'col2', 'new_col2', ... }) # inplace=False(default)
df.rename(columns = {'col1': 'new_col1', 'col2', 'new_col2', ... }, inplace=True)
피벗테이블
pd.pivot_table(df, index='index_col', aggfunc=np.XXX) # aggfunc=채울 값
인덱스 지정
df.set_index('col') # drop 제외 모든 옵션 False가 기본값
df.set_index(drop=True) # 인덱스로 세팅한 열 DataFrame에서 삭제 안함
df.set_index(append=True) # 기존 인덱스 삭제
df.set_index(inplace=True) # 덮어쓰기
인덱스 해제
df.reset_index()
df.reset_index(inplace=True) # 덮어쓰기 허용
결측치 (NaN)
df.dropna() # axis=0(default) 결측치 있는 행 지우기
df.dropna(axis=1) # 결측치 있는 열 지우기
df[].dropna() # 특정 시리즈 대상 결측치 제거
df.fillna(x) # x로 결측치 채우기
범주형 변수 groupby
df.groupby(['col1', 'col2', ... ])
# col1 그룹화하고 각 그룹마다의 평균 구함
df.groupby(['col1'])['col'].mean()
두 데이터프레임 합치기
- 인덱스 열이 같을 때
A.join(B)
- 인덱스 열이 달라 지정이 필요할 때
merge(A, B, left_on="A_index", right_on="B_index", how="join_type")
[PYTHON] smtplib 이용한 간단한 Gmail 발송 (0) | 2021.06.28 |
---|---|
[PYTHON] requests 모듈 이용한 HTTP GET/POST 요청 (0) | 2021.06.28 |
[PYTHON] 예외처리(Exception) (0) | 2021.06.14 |
[PYTHON] 파이썬 자료형(4) 집합(Set) (0) | 2021.06.07 |
[PYTHON] 파이썬 자료형(3) 문자열(String) (0) | 2021.06.07 |
댓글 영역