Pandas DataFrame 2
1. 결측치 처리
여기서는 앞서 배웠던 Series에 결측치 제거를 데이터프레임에서 사용했을 경우 어떤 결과가 나오는지 확인해보도록 하겠습니다.
실습에 앞서 아래 코드를 실행하여 pandas와 numpy 라이브러리를 불러오세요.
1.1 결측치 확인
Series에서 배웠던 것처럼 isnull()
메서드로 데이터프레임 내 결측치를 확인할 수 있습니다. 코드가 길기 때문에 하나씩만 실행할 수 있도록 나머지는 주석을 해가며 실행해보세요.
1.2 결측치 제거
dropna()
메서드로 결측치가 있는 행이나 열을 제거할 수 있습니다. 결측치를 제거하는 옵션으로 how
매개변수를 사용하여 'any' 또는 'all'을 지정할 수 있습니다. 'any'는 행 또는 열에 하나 이상의 결측치가 있으면 제거하고, 'all'은 모든 값이 결측치인 행 또는 열만 제거합니다. 또한 thresh
매개변수를 사용하여 최소 비결측치 개수를 지정할 수 있습니다. 이를 통해 특정 개수 이상의 비결측치가 있는 행만 유지할 수 있습니다. 여기서 주의해야 할 점은 결측치의 개수가 아니라 비결측치의 개수를 기준으로 한다는 것입니다. 아래 예제에서 thresh=2
의 숫자를 변경해보며 실습해보세요.
1.3 결측치 대체
fillna()
메서드는 데이터프레임의 결측치를 사용자가 지정한 값이나 방법으로 대체할 수 있게 해줍니다. 이 메서드는 데이터의 완전성을 유지하면서 결측치를 처리하고자 할 때 널리 사용됩니다. fillna()는 다양한 옵션을 제공하여 결측치 대체 방식을 세밀하게 조정할 수 있습니다. 예를 들어, 특정 값으로 모든 결측치를 채우거나, 각 열의 평균, 중앙값, 최빈값 등 통계량으로 대체할 수 있습니다. 또한 'ffill' 또는 'bfill' 메서드를 사용하여 이전 값이나 다음 값으로 결측치를 채울 수도 있습니다. limit 매개변수를 통해 연속된 결측치 중 일부만 채우도록 제한할 수 있으며, inplace 매개변수로 원본 데이터를 직접 수정할지 새로운 복사본을 반환할지 선택할 수 있습니다.
라인 수가 많기 때문에 하나씩 실행하기 위해 다른 코드를 주석처리해가며 실행해보세요.
어떠한 경우에 어떤 방식으로 결측치를 대체해야 하는지는 데이터의 특성과 분석 목적에 따라 다릅니다. 예를 들어, 기상청의 기온 데이터에서 결측치가 발생한 경우, 바로 이전 시간대의 기온으로 대체하는 것이 적합할 수 있습니다. 반면, 실시간 수집 데이터가 아니라 연구용 데이터에서 결측치가 발생한 경우, 해당 데이터의 특성을 고려하여 평균값이나 중앙값으로 대체하는 것이 더 적합할 수 있습니다.
2. 데이터 변환 및 정렬
데이터 변환 및 조작은 원시 데이터를 분석에 적합한 형태로 가공하고 정제하는 과정입니다. 주요 작업으로는 데이터 타입 변경, 스케일 조정, 범주형 변수 인코딩, 이상치 처리 등이 있습니다.
데이터 정렬은 특정 기준에 따라 데이터를 순서대로 배열하는 중요한 조작 기법입니다. 정렬을 통해 데이터의 패턴을 시각적으로 파악하거나 특정 조건에 맞는 데이터를 쉽게 찾을 수 있습니다.
2.1 데이터 타입 변환
데이터프레임의 열 데이터 타입을 변환하는 작업은 메모리 사용을 최적화하고, 특정 연산이나 분석 기법을 적용하기 위해 필요할 수 있습니다. Pandas는 astype()
메서드나 to_numeric()
, to_datetime()
등의 메서드를 사용하여 데이터 타입을 변환할 수 있도록 지원합니다.
Tip ! 데이터 타입
데이터 타입 | 설명 | 예시 |
---|---|---|
int64 | 64비트 정수 | 1, -10, 1000 |
float64 | 64비트 부동소수점 | 3.14, -0.01, 2.0e-3 |
object | 문자열 또는 혼합 타입 | "Hello", [1, 2, 3] |
bool | 불리언 값 | True, False |
datetime64 | 날짜와 시간 | 2023-06-15 14:30:00 |
timedelta64 | 시간 간격 | 2 days 3 hours |
category | 범주형 데이터 | "Red", "Green", "Blue" |
2.2 값 기준 정렬
값 기준 정렬은 데이터프레임이나 시리즈의 데이터를 특정 열이나 행의 값을 기준으로 오름차순 또는 내림차순으로 재배열하는 과정입니다. pandas에서는 sort_values()
메서드를 사용하여 이를 수행할 수 있습니다.
오름차순 정렬은 값이 작은 것부터 큰 순서로 배열하는 것으로, sort_values()
메서드의 기본 설정입니다. 내림차순 정렬은 값이 큰 것부터 작은 순서로 배열하며, ascending=False
매개변수를 사용하여 지정할 수 있습니다.
2.3 인덱스 기준 정렬
pandas에서는 sort_index()
메서드를 사용하여 인덱스를 기준으로 정렬할 수 있습니다. 이 메서드는 기본적으로 인덱스를 오름차순으로 정렬하지만, ascending=False
매개변수를 사용하여 내림차순 정렬도 가능합니다.
예를 들어, df.sort_index()
는 데이터프레임을 인덱스 기준으로 오름차순 정렬하고, df.sort_index(ascending=False)
는 내림차순으로 정렬합니다. 다중 인덱스의 경우, level 매개변수를 사용하여 특정 레벨의 인덱스를 기준으로 정렬할 수 있습니다.
3. 데이터 결합 및 병합
데이터 결합 및 병합은 여러 데이터셋을 하나로 합치는 과정으로, 데이터 분석에서 중요한 단계 중 하나입니다. pandas는 concat
, merge
, join
등의 함수를 제공하여 데이터프레임을 연결하거나 병합할 수 있도록 지원합니다. 이를 통해 데이터를 효율적으로 관리하고 분석할 수 있습니다.
3.1 concat 함수
concat 함수는 여러 데이터프레임을 수직 또는 수평으로 연결하는 데 사용됩니다. 이 함수는 축(axis)을 기준으로 데이터프레임을 연결하며, 기본적으로 수직 연결을 수행합니다. 수직 연결은 데이터프레임의 행을 연결하는 것으로, 데이터프레임의 열이 일치해야 합니다. 수평 연결은 데이터프레임의 열을 연결하는 것으로, 데이터프레임의 행이 일치해야 합니다. concat 함수는 axis 매개변수를 사용하여 연결 방향을 지정하며, 기본값은 0(수직 연결)입니다. concat은 인덱스 처리, 누락된 데이터 처리, 중복 열 처리 등 다양한 옵션을 제공하여 유연한 데이터 결합이 가능합니다.
df_concat_horizontal = pd.concat([df1, df2], axis=1)
print("\n수평으로 연결한 데이터프레임:")
df_concat_horizontal
df_concat_horizontal = pd.concat([df1, df2], axis=1)
print("\n수평으로 연결한 데이터프레임:")
df_concat_horizontal
3.2 merge 함수
merge 함수는 두 데이터프레임을 특정 열을 기준으로 병합하는 데 사용됩니다. 이 함수는 SQL의 JOIN 연산과 유사하며, 두 데이터프레임의 공통 열을 기준으로 병합합니다. merge 함수는 on
매개변수를 사용하여 기준 열을 지정하며, how
매개변수를 사용하여 병합 방식을 지정할 수 있습니다. 병합 방식은 'inner', 'outer', 'left', 'right' 등이 있으며, 기본값은 'inner'입니다. 'inner'는 두 데이터프레임에 공통으로 존재하는 키만 병합하고, 'outer'는 모든 키를 병합하며, 'left'와 'right'는 왼쪽 또는 오른쪽 데이터프레임의 키를 기준으로 병합합니다.
3.3 join 함수
join 함수는 두 데이터프레임을 인덱스를 기준으로 병합하는 데 사용됩니다. 이 함수는 how
매개변수를 사용하여 병합 방식을 지정할 수 있으며, 기본값은 'left'입니다. join 함수는 merge 함수와 달리 인덱스를 기준으로 병합하므로, 인덱스가 공통으로 존재해야 합니다. join 함수는 merge 함수와 달리 키를 기준으로 병합하지 않기 때문에, 병합 방식이 'inner' 또는 'outer'만 지원합니다.
merge 함수 vs join 함수 vs concat 함수
특성 | merge 함수 | join 함수 | concat 함수 |
---|---|---|---|
결합 기준 | 열(column) | 인덱스(index) | 축(axis) |
사용 방식 | pd.merge(df1, df2) | df1.join(df2) | pd.concat([df1, df2]) |
유연성 | 높음 | 중간 | 높음 |
복잡한 결합 | 적합 | 덜 적합 | 덜 적합 |
성능 (인덱스 기반) | 느림 | 빠름 | 빠름 |
주요 용도 | 복잡한 데이터 통합 | 간단한 데이터 결합, 시계열 데이터 | 데이터 연결(스택킹) |
키 기반 결합 | 가능 | 가능 (인덱스 기준) | 불가능 |
다중 데이터프레임 결합 | 두 개씩 결합 | 두 개씩 결합 | 여러 개 동시 결합 가능 |