Pandas란?
데이터프레임과 시리즈라는 자료형과 데이터 분석을 위한 다양한 기능을 제공하는 파이썬 라이브러리입니다.
Series란?
- 데이터프레임의 컬럼은 모두 시리즈입니다.
- (아래는 3개의 시리즈로 구성된 데이터프레임)
- 시리즈는 단순한 파이썬 리스트를 간직한 오브젝트입니다.
- 리스트는 파라미터로 주면 바로 시리즈가 생성됩니다.
- 시리즈는 데이터 가공 및 분석이 파이썬 리스트 보다 쉽습니다.
Series 만들기
import pandas as pd
# 값만 가지고 시리즈 만들기
s = pd.Series(['영수', '철수', '영희', 42])
# 인덱스와 값으로 시리즈 만들기
s = pd.Series(data=[90, 80, 70, 60],\
index=['국어', '영어', '수학', '과학'])
Series로 DataFrame 만들기
df = pd.DataFrame({
"정답" : y_test, '예측값' : y_pred})
Series 불러오기
# pandas 라이브러리 호출
import pandas as pd
# 탭으로 구분되는 CSV 불러오기
df = pandas.read_csv('../data/gapminder.tsv', sep='\t')
# excel 불러오기
df = pd.read_excel('result1.xlsx')
Series 확인하기
# 데이터프레임의 행과 열의 갯수 확인하기
print(df.shape)
print(df.shape[0]) #행의 갯수
print(df.shape[1]) #열의 갯수
# 인덱스 확인
idx = s.index
# 값 확인
val = s.values
# 데이터프레임의 자료형 확인하기
## 데이터프레임에서는 파이썬과 자료형이 약간 다름, str -> object, int -> int64, float -> float64
df.dtypes
# 데이터프레임의 종합정보 확인하기
df.info()
Series column 쪼개기
# 열단위로 쪼개기
a = df['column_name']
type(a) # a의 자료형은 Series
# DataFrame의 일부 열로 다시 DataFrame 만들기
b = df[['column_name1', 'column_name2', 'column_name3']] # 컬럼이름들로 대괄호를 두번 감싸야 함
type(b) # b의 자료형은 DataFrame
DataFrame row 쪼개기
# 행단위로 쪼개기 (loc)
## # loc 속성에 대괄호를 사용하여 인덱스(행 이름)를 전달하면 행 데이터를 추출할 수 있음
c = df.loc[0]
c = df.loc[-1] # 이렇게 하면 오류가 난다. 대괄호 안에 입력하는 값는 DataFrame의 인덱스값임
# 1, 100, 1000번째 행의 데이터 추출
df.loc[[0, 99, 999]] # 대괄호를 두번 감싸야 함
# 행단위로 쪼개기 (iloc)
## # iloc 속성에 대괄호를 사용하여 행 번호(행 위치)를 전달하면 행 데이터를 추출할 수 있음
c = df.iloc[0]
c = df.iloc[-1] # 이렇게 해도 된다.
# 1, 100, 1000번째 행의 데이터 추출
df.iloc[[0, 99, 999]] # 대괄호를 두번 감싸야 함
DataFrame row-column 일부 쪼개기
# loc를 사용하기
subset = df.loc[:, ['year', 'pop']] #행, 열
#subset = df.iloc[:, ['year', 'pop']] #오류
subset2 = df.loc[[0,99,999], ['country', 'lifeExp', 'gdpPercap']] # 0, 99, 999행의 country,lifeExp, gdpPercap열 데이터 추출
tesla.loc[(tesla.Date.dt.year == 2010) & (tesla.Date.dt.month == 6)] # & 조건, datetime의 dt 조건은 bool
# iloc를 사용하기
subset2 = df.iloc[:, [2, 4, -1]] #행, 열
#subset2 = df.loc[:, [2, 4, -1]] #오류
subset3 = df.iloc[:, 0:6:2] # list(range(0,6,2))와 동일
subset4 = df.iloc[[0, 99, 999], [0, 3, 5]] # 0, 99, 999행의 0, 3, 5번째 열 데이터 추출
DataFrame Groupby
result1 = df.groupby('group_field')['target_field'].mean()
result2 = df.groupby(['group_field1', 'group_field1'])[['target_field1', 'target_field2']].mean()
# groupby를 하면 group_field로 인덱스가 잡힘
flat = result.reset_index() # 기본 결과의 인덱스 계층 구조를 없애고 평탄화
# groupby 함수 예제
df.groupby('a')['b'].mean() # 평균
df.groupby('a')['b'].nunique() # 중복제거한 갯수
df.groupby('a')['b'].value_counts() # 빈도수
df.groupby('a')['b'].min() # 최소값
df.groupby('a')['b'].max() # 최대값
Series 기초 통계
s.mean()
s.min()
s.max()
s.std()
Series 연산
# 벡터 덧셈 (같은 인덱스의 값끼리 더함, 인덱스가 다르면 다른 부분은 NaN 처리)
s1 + s2
# 벡터 곱셈 (같은 인덱스의 값끼리 곱함, 인덱스가 다르면 다른 부분은 NaN 처리)
s1 * s2
# 스칼라 덧셈
s1 + 100 # 모든 s1의 값에 100이 더해짐
# 스칼라 곱셈
s1 * 3 # 모든 s1의 값에 3이 곱해짐
Series 정렬
s.sort_index(ascending=False) # 인덱스 기준으로 정렬되지만 그 상태가 시리즈에 저장되지 않음
s.sort_index(ascending=False, inplace=True) # 인덱스 기준으로 정렬되고 그 상태로 저장
s.sort_values(ascending=False) # 값 기준으로 정렬되지만 그 상태가 시리즈에 저장되지 않음
s.sort_values(ascending=False, inplace=True) # 값 기준으로 정렬되고 그 상태로 저장