Today I Learned (TIL)/Python

[TIL] 데이터 전처리 - Pandas(2)

신짜린 2024. 7. 17. 17:50

4. 데이터 확인하기

- 데이터 확인

data.head() # head()은 기본 5개 행에 대한 데이터를 보여줌
data.head(3) # ()안에 숫자만큼 데이터를 보여줌
data.info() # 데이터 정보 파악(인덱스, 컬럼명, 컬럼의 데이터 개수, 데이터 타입), null 값을 확인
data.describe() # 데이터의 기초통계량을 확인(숫자값에 대해서만 확인이 가능)

 

- 결측치, 중복, 이상치 확인

df.isnull().sum() # 결측치 확인, 결측치 갯수 확인도 가능
df.dropna() # 결측치 제거
df.duplicated(subset=['컬럼1', '컬럼2', '컬럼3']) # 중복 데이터 확인
df.drop_duplicates(subset=['컬럼1', '컬럼2', '컬럼3']) # 중복 데이터 제거
# IQR 계산
Q1 = df['컬럼1'].quantile(0.25)
Q3 = df['컬럼1'].quantile(0.75)
IQR = Q3 - Q1

# 이상치 기준 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

# 이상치 제거
df[(df['컬럼1'] >= lower_bound) & (df['컬럼1'] <= upper_bound)]

 

- 데이터 타입 변경

데이터 타입(Data Type) 설명 예시
int64, int 32 정수형 데이터(64비트 또는 32비트) 1, 42, -10, 1000
float64, float32 부동 소수점 수(64비트 도는 32비트) 3.14, -0.001, 2.718
object 문자열 데이터(일반적으로 문자열) 'Hello', 'Data Science'
bool 불리언(참/거짓) 데이터 True, False
datetime64 날짜와 시간 데이터 '2023-12-31 08:00:00'
timedalta64 시간 간격(두 날짜 또는 시간 사이의 차이) 데이터 '3 days', '2 hours'
category 카테고리형 데이터(제한된 고유 값으로 구성) 'Red', 'Blue', 'Green'
# 예시 1) int → float
import pandas as pd

data = {'integer_column': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# 정수형 열을 부동소수점으로 변환
df['integer_column'] = df['integer_column'].astype(float)
print(df.dtypes)
------------------------------------------------------------------------------------------------
# 예시 2) int → str
import pandas as pd

data = {'numeric_column': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# 숫자열을 문자열로 변환
df['numeric_column'] = df['numeric_column'].astype(str)
print(df.dtypes)

 

5. 데이터 선택

- .lioc[로우, 컬럼]: 인덱스 번호로 선택하기

 정수 기반의 인덱스를 사용한다.

data.iloc[0,2] # 행과 열 번호를 통해 특정 데이터를 선택할 수 있음
import pandas as pd
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)

selected_data = df.iloc[1:4, 0:2]  # 인덱스 1부터 3까지의 행과 0부터 1까지의 열 선택
print(selected_data)

 

- .lod[로우, 컬럼]: 이름으로 선택하기

 레이블 기반의 인덱스를 사용한다.

data.iloc[0,2] # 행과 열 번호를 통해 특정 데이터를 선택할 수 있음
import pandas as pd
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 30, 40, 50],
    'C': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])

selected_data = df.loc['b':'d', 'A':'B']  # 레이블 'b'부터 'd'까지의 행과 'A'부터 'B'까지의 열 선택
print(selected_data)

 

- 1개의 컬럼 전체를 선택할 경우

# 여러개의 컬럼을 선택할 경우에도 리스트를 활용
# 컬럼을 내가 원하는 대로 선택해서 입력하면 그 순서대로 나옴
data.loc[: , '컬럼명'] # 또는 데이터프레임['컬럼명'] 으로도 동일한 값을 선택할 수 있습니다.
data['컬럼명']

data[   ['컬럼명1', '컬럼명2', '컬럼명3' ]   ]

 

- 2개 이상의 셀을 선택할 경우

# 2개 컬럼명을 선택할 경우
data.loc[  '행이름'  , ['컬럼명1' , '컬럼명2']   ]

# 2개 행이름을 선택할 경우
data.loc[  ['행이름1', '행이름2'] , '컬럼명1'    ]

# 리스트 슬라이싱 : 을 활용해서 특정 범위를 지정하여 선택할 수 있습니다.
data.loc[ '행이름' , '컬럼명1' : ] # '컬럼명1' : ==> 컬럼명1부터 끝까지라는 의미

 

- 조건에 따라 데이터 선택하기: Boolean Indexing

 조건을 이용하여 데이터프레임에서 특정 조건을 만족하는 행을 선택한다. 데이터를 필터링하거나 원하는 조건을 만족하는 행을 추출할 수 있다. 주로 불리언 값을 가지는 조건식을 사용하여 데이터프레임을 인덱싱한다.

 1) 단일 조건으로 필터링: 특정 열의 값을 기준으로 조건을 설정하여 해당 조건을 만족하는 행을 선택

# 'age' 열에서 30세 이상인 행 필터링
df[df['age'] >= 30]

 

 2) 여러 조건으로 필터링: 여러 개의 조건을 조합하여 복합적인 필터링을 수행

# 'age' 열에서 30세 이상이면서 'gender' 열이 'Male'인 행 필터링
df[(df['age'] >= 30) & (df['gender'] == 'Male')]

 

 3) 조건에 따른 특정 컬럼 필터링: 조건을 만족하는 특정 열만 선택할 수 있음

# 'age' 열에서 30세 이상인 경우의 'name' 열만 선택
df.loc[df['age'] >= 30, 'name']

 

4) isin()을 활용한 필터링: 리스트를 활용하여 여러 값들을 포함하는 행을 선택할 수 있음

# 'gender' 열에서 'Male' 또는 'Female'인 행 필터링
df[df['gender'].isin(['Male', 'Female'])]

 

- 데이터 추가

# 데이터프레임에 컬럼 추가
df = pd.DataFrame()

df['컬럼명'] = data
# df라는 데이터프레임에 '컬럼명'이라는 이름의 컬럼이 추가되고,해당 컬럼에 data라는 값이 추가된다.
# 이때, data값이 1개의 단일 값인 경우에는 전체 df라는 데이터프레임 행에 data 값이 전체 적용됨
# 즉, 하나의 값인 경우 => 전체 모두 동일한 값 적용
# (리스트,시리즈)의 형태인 경우 => 각 순서에 맞게 컬럼 값에 적용됨
-----------------------------------------------------------------------------------------------
# 신규 컬럼 추가
df = pd.DataFrame()

# 컬럼 추가하기
df['EPL'] = 100
df['MLS'] = 60
df['NBA'] = 70

# 리스트 형태로 컬럼값 추가하기
df['KFC'] = [50, 10, 30]
# 행 수를 맞춰서 입력해줘야함

# 컬럼을 여러 조건 및 계산식을 통해 산출 값으로도 추가가 가능
df['ABC'] = (df['EPL'] + df['NBA']) * df['MLS'] * 2