Pandas DataFrame
1. 데이터프레임이란?
데이터프레임은 데이터 분석과 과학 분야에서 널리 사용되는 강력한 도구입니다. 이는 복잡한 데이터셋을 직관적이고 효율적으로 다룰 수 있게 해줍니다. 데이터프레임의 각 열은 일종의 시리즈(Series)로, 하나의 데이터 타입을 가집니다. 예를 들어, 한 열은 정수형, 다른 열은 문자열, 또 다른 열은 날짜 형식을 가질 수 있습니다. 데이터프레임의 인덱싱 시스템은 매우 유연합니다. 기본적으로 0부터 시작하는 정수 인덱스를 사용하지만, 사용자가 원하는 대로 커스텀 인덱스를 지정할 수 있습니다. 예를 들어, 날짜를 인덱스로 사용하여 시계열 데이터를 쉽게 다룰 수 있습니다.
위니북스에서도 실행할 수 있지만 코랩을 이용하면 좀 더 깔끔한 UI로 확인할 수 있습니다. 우선 실습을 하기 전 아래 코드를 실행하여 numpy, pandas 라이브러리를 불러오겠습니다.
2. DataFrame의 Index
DataFrame의 인덱스는 각 행을 고유하게 식별하는 레이블입니다. 인덱스는 데이터의 위치를 나타내며, 이를 통해 데이터를 빠르고 쉽게 검색, 정렬, 그리고 조작할 수 있습니다. DataFrame에는 명시적 인덱스와 묵시적 인덱스 총 두 가지 유형의 인덱스가 있습니다.
2.1 명시적 인덱스
명시적 인덱스(Explicit Index)는 사용자가 직접 지정한 인덱스입니다. 이는 데이터에 의미 있는 레이블을 부여하여 데이터의 해석과 관리를 용이하게 합니다. 예를 들어, 시계열 데이터의 경우 날짜를 인덱스로 사용하거나, 고유한 ID를 인덱스로 사용할 수 있습니다.
2.2 묵시적 인덱스
묵시적 인덱스(Implicit Index)는 DataFrame 생성 시 사용자가 별도로 인덱스를 지정하지 않았을 때 자동으로 생성되는 인덱스입니다. 이때 생성되는 인덱스의 기본 타입은 RangeIndex로, 0부터 시작하는 정수 인덱스입니다.
2.3 df 변형 - pivot
pivot 함수는 데이터프레임의 구조를 변경하여 특정 열의 고유한 값들을 새로운 열로 변환합니다. 이는 데이터를 더 넓은 형태(wide format)로 재구성하는 데 유용합니다.
dataframe.pivot(index=None, columns=None, values=None)
dataframe.pivot(index=None, columns=None, values=None)
pivot 함수의 기본 구조 및 인자는 다음과 같습니다.
- index: 새로운 데이터프레임의 인덱스로 사용할 열 이름
- columns: 새로운 데이터프레임의 열 이름으로 사용할 열 이름
- values: 새로운 데이터프레임의 데이터로 사용할 열 이름
이 예제에서는 '국가'를 인덱스로, '연도'를 열로, 'GDP성장률'을 값으로 사용하여 pivot을 수행합니다. 결과적으로, 각 국가의 연도별 GDP 성장률을 쉽게 비교할 수 있는 형태로 데이터가 변형됩니다.
2.4 df 변형 - melt
melt 함수는 pivot의 반대 개념으로, "넓은" 형태의 데이터를 "긴" 형태로 변환합니다. 이는 여러 열을 두 개의 열(변수명과 값)로 재구성하는 데 사용됩니다.
3. DataFrame의 데이터 접근
Pandas 데이터프레임에서 데이터에 접근하는 방법은 여러 가지가 있습니다. 가장 많이 사용되는 방법으로 loc, iloc, at, iat가 있습니다. 각각의 방법을 간단한 예제와 함께 살펴보겠습니다.
3.1 loc(Label indexing)
loc는 라벨 기반 인덱싱을 사용합니다. 행과 열의 이름으로 데이터에 접근합니다. 불리언 인덱싱, 슬라이싱, 라벨 이름을 사용하여 데이터를 선택할 수 있습니다. 라벨 기반 인덱싱을 사용하면 데이터프레임의 특정 부분을 쉽게 선택할 수 있습니다.
3.2 iloc (Integer indexing)
iloc는 정수 인덱스를 사용합니다. 행과 열의 위치(번호)로 데이터에 접근합니다. 0부터 시작하는 인덱스를 사용합니다. 파이썬의 일반적인 슬라이싱 규칙을 따릅니다 (끝 인덱스는 포함되지 않습니다). 위치 기반으로 데이터를 빠르게 선택할 수 있습니다. 특정 범위의 행과 열을 쉽게 선택할 수 있습니다.
3.3 at를 사용한 데이터 접근
at는 loc의 스칼라 버전으로, 단일 값에 접근할 때 사용됩니다. loc와 마찬가지로 라벨 기반 인덱싱을 사용하지만, 단일 요소에 대해 더 빠른 성능을 제공합니다. 특정 행과 열의 교차점에 있는 하나의 값을 빠르게 가져오거나 설정할 때 유용합니다.
3.4 iat를 사용한 데이터 접근
iat는 DataFrame이나 Series에서 단일 값에 접근할 때 사용하는 메서드로, 순수하게 정수 위치 기반 인덱싱만을 지원합니다. iloc의 스칼라 버전으로 볼 수 있으며, 오직 정수 인덱스만을 받아들입니다.
3.5 다중 조건 인덱싱
다중 조건 인덱싱은 여러 조건을 동시에 적용하여 DataFrame에서 특정 데이터를 선택하는 방법입니다. 이 방법은 복잡한 조건을 사용하여 데이터를 필터링할 때 매우 유용합니다. 주로 loc와 함께 사용되며, 불리언 연산자를 활용하여 여러 조건을 결합합니다.
다중 조건을 사용할 때는 각 조건을 괄호로 묶고, 논리 연산자(&: and
, |: or
)를 사용하여 조건들을 연결합니다. 이를 통해 매우 구체적인 데이터 서브셋을 추출할 수 있습니다.
4. DataFrame 행, 열
DataFrame의 Column(열)은 세로로 늘어선 데이터의 집합으로, 각 열은 특정 속성이나 변수를 나타냅니다. 각 열은 고유한 이름(라벨)을 가지며, 동일한 데이터 타입을 갖는 것이 일반적입니다. Row(행)는 가로로 늘어선 데이터의 집합으로, 각 행은 하나의 관측치 또는 레코드를 나타냅니다.
4.1 DataFrame 행과 열 조회
DataFrame에서 데이터를 조회할 때는 행과 열 모두에 접근할 수 있습니다. 열 조회는 주로 열 이름을 사용하며, 행 조회는 인덱스나 위치를 사용합니다. 특정 조건에 맞는 데이터를 선택적으로 조회할 수도 있습니다.
4.1.1 특정 열 조회
4.1.2 조건을 사용한 행 조회
조건을 사용하여 특정 조건을 만족하는 행을 조회할 수 있습니다. 이를 통해 데이터프레임에서 원하는 데이터를 쉽게 필터링할 수 있습니다. 여기서 조건은 불리언 인덱싱을 사용하여 표현됩니다.
4.1.3 loc를 사용한 레이블 기반 인덱싱
4.1.4 iloc를 사용한 정수 위치 기반 인덱싱
4.1.5 특정 조건을 만족하는 행에서 특정 열만 조회
5. DataFrame의 통계 및 연산
DataFrame의 통계 및 연산 기능은 데이터 분석에서 핵심적인 역할을 합니다. 이를 통해 데이터의 특성을 파악하고, 유용한 인사이트를 얻을 수 있습니다.
5.1 describe()
describe()
메서드는 pandas에서 데이터의 주요 통계 정보를 한눈에 파악할 수 있게 해주는 강력한 도구입니다. 이 메서드는 데이터프레임이나 시리즈에 적용되어 수치형 데이터의 중심 경향성, 분산, 분포 등을 요약해줍니다. 수치형 열에 대해서는 개수, 평균, 표준편차, 최솟값, 1사분위수(25%), 중앙값(50%), 3사분위수(75%), 최댓값을 계산하여 보여줍니다. 이를 통해 데이터의 전반적인 특성을 빠르게 이해할 수 있으며, 이상치의 존재 여부나 데이터의 대략적인 분포를 파악할 수 있습니다. 가장 먼저 수행하는 데이터 탐색 단계 중 하나로, 데이터의 전반적인 특성을 파악하는 데 유용합니다.
5.2 그룹별 연산
groupby()
메서드는 데이터를 특정 기준에 따라 그룹으로 나누고, 각 그룹에 대해 연산을 수행할 수 있게 해주는 강력한 도구입니다. 이 메서드는 "split-apply-combine" 전략을 따르는데, 이는 데이터를 그룹으로 나누고(split), 각 그룹에 함수를 적용한 다음(apply), 결과를 하나의 데이터 구조로 결합(combine)하는 과정을 의미합니다.
pandas의 DataFrame 핵심 개념과 주요 기능을 살펴보았습니다. DataFrame의 기본 구조와 생성 방법, 인덱싱과 데이터 접근 기법, 데이터 조작 및 변환 방법, 기본적인 통계 분석과 그룹 연산에 대해 학습하였습니다. 이러한 기능들은 실제 데이터 분석 과정에서 필수적으로 활용되는 도구입니다. pandas DataFrame은 데이터 과학과 분석 분야에서 광범위하게 사용되는 강력한 도구이며, 이를 숙달함으로써 효과적인 데이터 처리와 인사이트 도출이 가능해집니다.