시리즈
sr = pd.Series(dict)
index_array = sr.index
data_array = sr.values
리스트 or 튜플 → 시리즈 변환 시 인덱스는 정수형으로 자동 저장 (인덱스 별도 지정 가능)
sr = pd.Series(tuple, index=['a', 'b', 'c', 'd']
원소 선택
sr[n]
sr['index']
sr[1:7] # index 1~6 출력
sr['b':'f'] # index 'b'~'f' 출력
데이터프레임
2차원 배열 (matrix)
행과 열로 구분.
딕셔너리 → 데이터프레임 변환 시 딕셔너리의 key는 데이터프레임의 열 이름, values list는 열이 된다.
df = pd.DataFrame(dict)
행 인덱스 / 열 이름 설정
df = pd.DataFrame( 2d_array,
index=row_index_array,
columns=column_name_array )
df.index = 새로운 행 인덱스 배열
df.columns = 새로운 열 이름 배열
df.rename(index={기존 인덱스:새 인덱스, ...})
df.rename(columns={기존 이름:새 이름, ...})
행 / 열 삭제
df.drop(행 인덱스 or 배열, axis=0)
df.drop(열 이름 or 배열, axis=1)
행 선택
열 선택
df["열 이름"]
df.열 이름 # 열 이름이 문자열일 경우에만 가능
df[['열 이름]] ## 2중 대괄호 사용시 시리즈가 아닌 데이터프레임 반환
범위 슬라이싱
df.iloc[start:end:간격]
원소 선택
df.loc[행 인덱스, 열 이름]
df.iloc[행 번호, 열 번호]
열 추가
df['추가하려는 열 이름'] = 데이터 값
행 추가
df.loc['새로운 행 이름'] = 데이터 값 또는 배열
# 기존 인덱스의 순서를 따르지 않아도 된다.
df.loc[3] = 0
# 대신
df.loc[10] = 0
#을 해도 오류는 발생하지 않는다. (행 인덱스는 3이 아닌 10)
원소 값 변경
df의 일부분 또는 원소 = 새로운 값
# ex)
df.iloc[0][3] = 80
행, 열의 위치 바꾸기 (전치행렬)
df.transpose()
# 또는
df.T
특정 열을 행 인덱스로 설정
df.set_index(['열 이름'] 또는 '열 이름')
행 인덱스 재지정
df.reindex(새 인덱스 배열) # 기존 객체 변경X, 새 데이터프레임 객체 반환
# reindex로 발생한 NaN 값을 숫자 0으로 채우기
df.reindex(new_index, fill_value=0)
행 인덱스 초기화
# 행 인덱스를 정수형 위치 인덱스로 초기화. 기존 행 인덱스는 열로 이동.
df.reset_index()
행 인덱스를 기준으로 데이터프레임 정렬
df.sort_index(ascending=True or False) # 새 데이터프레임 반환
특정 열의 데이터값을 기준으로 데이터프레임 정렬
# 열 기준 정렬
df.sort_values(by=열 이름, ascending=True or False)
시리즈 연산 (시리즈 vs 숫자)
# 개별 원소에 각각 숫자를 연산하고 계산한 결과를 시리즈 객체로 반환
sr (연산자[+, -, *, /]) (숫자)
산술연산
시리즈 연산 (시리즈 vs 시리즈)
# 같은 인덱스를 가진 원소끼리 계산 후 새 시리즈 반환
sr1 (연산자[+, -, *, /]) sr2
# 길이가 다른 경우나, 해당 인덱스 명이 없는 경우 NaN으로 처리
연산 메소드
sr1.add(sr2, fill_value=0)
데이터프레임 연산 (데이터프레임 vs 숫자)
# 개별 원소에 각각 숫자를 연산하고 계산한 결과를 데이터프레임 객체로 반환
df (연산자[+, -, *, /]) (숫자)
데이터프레임 연산 (데이터프레임 vs 데이터프레임)
# 시리즈에서와 같이, 존재하지 않는 데이터나 NaN 데이터에 대해서 NaN으로 처리
df1 (연산자[+, -, *, /]) df2