Pandas 정의
- 데이터 조작 및 분석에 사용
- 다양한 파일 형식의 데이터 읽기 및 쓰기, 데이터 정리, 필터링, 그룹화, 병합, 재구성 및 데이터 계산 수행을 위한 광범위한 기능을 제공
Pandas 기본 사용법
# pandas 불러오기
import pandas as pd
# pd.Series(): 1차원 데이터를 위한 자료구조
# Serise 내부 구조: 인덱스가 자동으로 부여됨(딕셔너리의 키 개념과 유사)
# 인덱스는 문자 또는 숫자로 설정 가능하며, default는 0부터 시작하는 정수
# index: Series 객체의 인덱스에 접근, values: Series 객체의 값에 접근
data = [0,1,2,3] #1차원 배열 생성
s = pd.Series(data) #배열을 series 클래스로 변환
print(s)
print(s.shape) #(4,)
data = [100,200,300]
index = ["a","b","c"]
s = pd.Series(data,index)
print(s)
Pandas 인덱싱
# Series 인덱싱
# s.iloc[행 번호]: 행 번호를 통해 객체 값 접근
print(s.iloc[1]) #200
# s.loc[인덱스]: 인덱스를 통해 객체 값 접근
print(s.loc["a"]) #100
# s.[]: 대괄호를 통해 객체 값 접근
print(s[0], s[1], s["a"]) #100 200 100
Pandas 슬라이싱
# Serise 슬라이싱
# s.iloc[]: iloc[행_start:end]
print(s.iloc[0:2])
# s.loc[]: loc[인덱스_start:end], end 인덱스를 포함함
print(s.loc["a":"b"])
# s.[]: [start:end]
print(s[0:2], s["a":"c"])
# 연속적이지 않은 값 인덱싱: 행 번호 또는 인덱스를 리스트로 구성해서 사용
target = [0,2]
print(s.iloc[target])
Pandas 값 접근, 추가, 삭제, 수정
# Series 값 접근, 추가, 삭제, 수정
# s.iloc[행번호, 열번호]: 해당 위치 값 접근
# s.loc[인덱스, 컬럼명]: 해당 위치 값 접근
# s.at[row_label, columns_label]: 특정 위치 값 읽거나 수정
print(s.at[2,'phone']) # phone 라는 컬럼의 3번째(인덱스 2) 값 출력
# s.iloc[행번호 리스트, 열번호 리스트]: 해당 영역 값 접근
# s.loc[인덱스 리스트, 컬럼명 리스트]: 해당 영역 값 접근
# s.loc[인덱스] = 값: 딕셔너리와 유사한 방식으로 값 추가
data = [100,200,300]
index = ["a","b","c"]
s = pd.Series(data,index)
s.loc["d"] = 400
print(s)
# s.drop(인덱스): 원본은 유지하고 값이 삭제된 객체 리턴
data = [100,200,300]
index = ["a","b","c"]
s = pd.Series(data,index)
s1 = s.drop("a")
print(s1)
# Series 행번호나 인덱스를 사용하여 value 수정 가능
data = [100,200,300]
index = ["a","b","c"]
s = pd.Series(data,index)
s.iloc[0] = 1000
s.loc["b"] = 2000
print(s)
Pandas 연산
# Series 연산
# 연산이 Series 객체의 전체 값에 적용됨(Numpy와 동일)
s = pd.Series([100,200,300])
print(s + 10)
s1 = pd.Series([10,20,30])
print(s - s1)
# 값은 인덱스 기준으로 사칙연산 적용됨 (순서 상관없이 인덱스 기준)
s2 = pd.Series(data=[100,200,300], index=["a","b","c"])
s3 = pd.Series(data=[10,20,30], index=["a","b","d"])
print(s2-s3)
# 비교 연산 결과로 Boolen 타입이 저장된 Series가 리턴됨
s = pd.Series([100,200,300])
s1 = s > 200
print(s1)
# True/False 값을 통해 True 값만 필터링 가능
s = pd.Series([100,200,300])
s1 = s > 200
print(s[s1])
Pandas Column
# df.columns: 컬럼명 출력
print(df.columns[5]) # 6번째 컬럼명 출력
# df.dtype: 데이터 타입 출력
print(df.dtypes[5]) # 6번째 컬럼의 데이터 타입 출력
# df.select_dtypes(inclue=[], exclude=[]): 특정 데이터 타입을 가진 컬럼을 선택
z = df.select_dtypes(include=['int64','float64'])
print(z.columns) # 수치형 변수를 가진 컬럼 출력
# 컬럼 추가 및 삭제
# df['컬럼명'] = 시리즈 객체
# df.drop('컬럼명', axis=1): 원본 유지되고 컬럼 삭제된 새로운 데이터프레임 객체 리턴됨
# row 추가 및 삭제
# df.loc[인덱스] = 데이터
# df.drop(인덱스, axis=0): 원본 유지되고 row 삭제된 새로운 데이터프레임 객체 리턴됨
Pandas DataFrame
# pd.DataFrame({'컬럼명':[데이터],'컬럼명2':[데이터]},index=인덱스명)
# pd.read_csv('파일경로\파일명', encording=''): csv 파일 불러오기
df = pd.read_csv('hello\names.csv')
print(df)
# 데이터 상위/하위 행 출력
# df.head(숫자): 데이터 상위 n개 행 출력(default: 5)
print(df.head())
# df.tail(숫자): 데이터 하위 n개 행 출력(default: 5)
print(df.tail())
# df.describe(): 통계정보 출력
print(df.describe())
# df.reindex(new_index): 인덱스 변경
# df.reindex(column=['ab','cd']: 컬럼 순서 변경
index = ['a','b','c']
df = pd.DataFrame({"가:[100,200,300],"나:[10,20,30]},index=index)
new_index = ['h','i','j']
df.reindex(new_index) # 인덱스 abc에서 hij로 변경됨
Pandas 결측값 처리
from numpy import nan as NA
data = pd.DataFrame([[1., 6.5, 3.], [1., NA, NA], [NA, NA, NA], [NA, 6.5, 3.]])
print(data)
# df.dropna(axis=0/1): 결측 값이 있는 행/열 삭제
cleaned = data.dropna(axis=0)
print(cleaned)
# df.fillna(특정값): 특정 값으로 결측값 대체
filled = data.fillna(0)
print(filled)
# df.fillna({'컬럼명':특정값, '컬럼명2':특정값}): 컬럼별로 결측값을 다르게 대체
filled2 = data.fillna({1:0.5, 2:1})
print(filled2)
Pandas filtering
# df[df['컬럼명']=='값']
# df[(조건1)&(조건2)]: 조건 둘다 만족해야 할 때
# df[(조건1)|(조건2)]: 조건 중 하나라도 만족하면 될 때
k = data[(data['0'] < -2.5) | (data['0'] > 2.5)] # '0' 컬럼의 값이 -2.5보다 작거나 2.5보다 큰 row만 지정
print(k)
- 데이터 로드 방법
> read_csv(): 쉼표로 구분된 파일 읽어옴
> pandas.read_csv('[file_path/file_name.csv]')
> read_excel(): 엑셀 파일 읽어옴
> read_table(): 탭으로 구분된 파일 읽어옴
> read_fwf(): 구분자가 없는 파일 읽어옴
- 데이터 로드 시 옵션
> sep: 구분자 지정
> header: 컬럼 이름 지정
> index_col: index로 사용할 컬럼 지정
> encoding: 인코딩 지정
- 데이터 저장 방법
> to_csv: csv 파일로 저장
> to_excel: 엑셀 파일로 저장
> to_json: json 파일로 저장
> [data_name].to_csv('[file_path/file_name.csv]',[option])