파이썬

[파이썬] Pandas 사용해서 데이터 전처리하기

제에엔 2025. 2. 27. 17:17

🔎 판다스(Pandas) 사용하기

판다스를 사용하기 위해서는 해당 라이브러리를 import 해줘야 한다.

import pandas as pd
# import: 특정 라이브러리를 스크립트로 호출
# as: 해당 라이브러리 이름을 줄여 사용

🔎 데이터 불러오기

데이터 전처리를 위해서는 데이터가 저장되어 있는 파일을 불러와서 읽어야 한다.

#데이터 불러오기
df1=pd.read_csv('Data.csv')
# Data.csv 파일 불러와 df1에 저장

🔎 데이터 확인하기

☑️ `Index`

데이터의 범위를 확인하기 위해 사용한다.

df1.index
# 함수에서 소괄호를 안 쓰는 경우: 데이터의 구조를 확인하는 경우

# 결과: RangeIndex(start=0, stop=51301, step=1)

 

☑️ `Columns`

데이터의 항목(열)을 확인한다.

df1.columns

# 결과: Index(['Column1', 'Column2', 'Column3', 'Column4', 'Column5'], dtype='object')

 

☑️ `.info()`

데이터의 구조와 타입을 확인한다.

결측값(Missing Value) 등을 확인할 때 사용한다.

 

Input

df1.info()
# Non-Null Count: 결측값이 아닌, 존재하는 데이터의 개수

 

Output

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 51301 entries, 0 to 51300
Data columns (total 20 columns):
 #   Column         Non-Null Count  Dtype  
---  ------         --------------  -----  
 0   Column1        51301 non-null  int64  
 1   Column2        51301 non-null  int64  
 2   Column3        51301 non-null  object 
 3   Column4  	    51301 non-null  object 
 4   Column5        51301 non-null  object 
dtypes: float64(2), int64(2), object(1)
memory usage: 7.8+ MB

🔎 데이터 전처리

데이터 핸들링 기법에는 다음과 같은 것들이 있다.

  • 데이터 추출 (행 단위 / 열 단위)
  • 데이터 정렬
  • 데이터 필터
  • 데이터 요약 (Pivot)
  • 날짜 데이터 처리
  • 파생 변수: 기존에 있는 데이터 항목을 이용해 새로운 항목을 만드는 것
  • 데이터 재구조화 / 병합

☑️ 데이터 추출 (행 단위)

✔️ `.head()`

상위 n개의 데이터를 추출할 때 사용한다.

만약 공백으로 줄 경우, 디폴트 값으로 5개를 추출한다.

df1.head(3)

 

✔️ `.tail()`

하위 n개의 데이터를 추출할 때 사용한다.

df1.tail(3)

 

✔️ `.iloc[n:m]`

특정 범위의 데이터를 확인할 때 사용한다.

n번째부터 m번 이전까지의 데이터를 추출한다.

df1.iloc[50:100]

 

☑️ 데이터 추출 (열 단위)

✔️ Column 이름으로 추출

df1['Column1']

 

인덱스와 `Column1` 열의 값들을 출력한다.

0         96900
1        102900
2         96900
3         66900
4         66900
          ...  
51296     96900
51297     96900
51298    120900
51299     96900
51300     96900
Name: Amount_Month, Length: 51301, dtype: int64

 

✔️ 평균값 계산: `.mean()`

하나의 열의 평균값을 계산한다.

df1['Column1'].mean()

# 결과: 93994.97428900021

🔎 Pandas 데이터 구조

판다스 데이터 구조에는 Series(순열) 구조와 Data Frame 구조가 있다.

Series 구조는 `index - value`가 짝지어져 있고,

Data Frame 구조는 `index - column - value` 값으로 이루어져있다.

Series가 여러 줄 모이면 하나의 Data Frame이 구성되는 것이다.

 

🔽 Series 구조

0         96900
1        102900
2         96900
3         66900
4         66900
          ...  
51296     96900
51297     96900
51298    120900
51299     96900
51300     96900
Name: Amount_Month, Length: 51301, dtype: int64

 

🔽  Data Frame 구조

Index	Amount_Month	Channel		Sales_Type
0	96900		영업방판		렌탈
1	102900		영업방판		렌탈
2	96900		홈쇼핑/방송	렌탈
3	66900		재계약		멤버십
4	66900		재계약		멤버십
...	...		...		...
51296	96900		대형마트A	렌탈
51297	96900		대형마트A	렌탈
51298	120900		영업방판		렌탈
51299	96900		홈쇼핑/방송	렌탈
51300	96900		홈쇼핑/방송	렌탈
51301 rows × 3 columns

 

위 데이터 프레임에서 `Amount_Mont`와 `Channel`만 뽑아서, 상위 10개의 데이터만 보고 싶다고 하면 아래와 같이 작성하면 된다.

df1[['Amount_Month', 'Channel']].head(10)

 

그럼 다음과 같은 결과를 얻을 수 있다.


🔎 데이터 정렬

☑️ 오름차순 정렬

`.sort_values(by='Column_Name')`

정렬하고 싶은 열의 이름을 인자로 넘겨서 오름차순으로 정렬할 수 있다.

df1.sort_values(by='Amount_Month')

 

☑️ 내림차순 정렬

`.sort_values(by='Column_Name', ascending=False)`

내림차순으로 정렬하고 싶으면 `ascending` 값을 False로 주면 된다. (디폴트 값: True)

df1.sort_values(by='Amount_Month', ascending=False)

 

☑️ 여러 개의 컬럼을 기준으로 정렬

만약 첫 번재 정렬 기준 컬럼의 값이 같으면, 두 번째 기준 컬럼 값으로 정렬할 수 있다.

이 경우, `by` 값을 리스트 형태로 주면된다.

그럼 앞에 나온 컬럼 순서대로 우선순위를 부여하여 정렬한다.

df1.sort_values(by=['Amount_Month', 'Age'], ascending=False)

이 경우, `Amount_Month` 값이 높으면서, `Age` 가 높은 순서대로 정렬한다.

 

 ✔️ 각 컬럼마다 오름차순/내림차순 다르게 부여하기

만약, `Amount_Month` 컬럼은 오름차순, `Age` 컬럼은 내림차순으로 정렬하고 싶다면 `ascending` 값도 Boolean으로 이루어진 리스트로 주면 된다.

df1.sort_values(by=['Amount_Month', 'Age'], ascending=[True, False])

이 경우, `Amount_Month` 값이 낮으면서, `Age` 값은 높은 수서대로 정렬한다.


🔎 데이터 프레임을 파일로 저장

☑️ 엑셀 파일로 저장: `.to_excel('file.xlsx')`

결과로 추출된 데이터 프레임을 엑셀 파일로 저장하고 싶으면 `.to_excel('file.xlsx')`를 사용하면 된다.

함수의 인자로는 파일 이름을 넘겨주면 된다.

df1.sort_values(by=['Amount_Month', 'Overdue_count'], 
                ascending=[False, True]).head(50).to_excel('result.xlsx')

`Amount_Month`이 높고, `Overdue_count`이 낮은 순서대로 정렬해서 `result.xlsx` 파일에 저장한다.


🔎 데이터 필터 (Filter)

기존 데이터 프레임에서 원하는 조건을 만족시키는 것들만 추출할 수 있다.

데이터 분석에서는 범주형 데이터 항목의 특성에 따라 다른 데이터의 통계적 특성이 달라질 수 있기 때문에 원하는 조건을 만족하는 항목만 뽑아내서 볼 수 있어야 한다.

☑️ 특정 조건에 대해 True를 만족하는 항목 추출: `.loc[ ]`

cond1 = (df1['Amount_Month'] >= 100000)  # 월랜탈비용이 10만원 이상인 조건
df1.loc[cond1]  # 해당 조건에 대한 데이터를 추출
# loc[(조건식)]: 특정 조건 (True)에 해당하는 데이터를 추출

이 경우, `df1` 데이터 중 `Amount_Month` 값이 10만 이상인 항목만 추출한다.

 

✔️ 조건이 여러개인 경우

조건이 여러 개인 경우에는 `.loc[ ]` 안에 `&`으로 여러 개의 조건을 넣어주면 된다.

cond1=(df1['Amount_Month'] >= 100000)
cond2=(df1['Overdue_count']<=5)
df1.loc[cond1 & cond2]

 

☑️ 특정 값을 만족하는 항목 추출: `.isin( )`

만약 컬럼에 대한 값 중에 특정 값들만 추출하고 싶을 때는 `.isin( )`을 사용한다.

여러 값들에 대한 항목을 모두 보고 싶다면 리스트로 넣어주면 된다.

cond1 = df1['Channel'].isin(['영업방판', '홈쇼핑/방송', '대형마트A'])
df1.loc[cond1]

이 경우, `Channel`에 대한 값이 `영업방판`, `홈쇼핑/방송` 또는 `대형마트A`인 항목들만 추출한다.


🔎 데이터 요약 (pivot)

평균 등 전체 데이터에 대한 통계를 알고 싶을 때 `.pivot_table( )` 함수를 이용할 수 있다.

인자로는 `index`와 `vaues`, `aggfunc` 값을 넘겨주어야 한다.

  • `index` : 구분하고자 하는 값
  • `values` : 계산하고자 하는 값
  • `aggfunc` : 계산하려는 통계량
df1.pivot_table(index='Sales_Type', values='Amount_Month', aggfunc='mean')

이 경우, `Sales_Type` 별 `Amount_Month`의 평균(`mean`)을 계산한다.

만약, `Sales_Type`에 대한 값으로 '렌탈'과 '멤버십'이 있다고 하면, 

`Sales_Type='렌탈'`인 항목들의 `Amount_Month` 값들의 평균과 `Sales_Type='멤버십'`인 항목들의 `Amount_Month` 값들의 평균을 데이터 프레임 구조로 출력한다.