데이터 분석 시 자주 사용하는 기본 문법 정리
데이터 분석 전 조회나 전처리 시 주로 사용되는 문법 정리. 계속 까먹어서 복기 겸..ㅎ
(계속 업데이트 할 예정)
최종 업데이트 : 2025-12-24
shape
- 데이터 크기 확인 시에 주로 사용됨
- 행(Row) 개수
- 열(Column) 개수
- 데이터프레임의 크기를 튜플 형태로 반환
- 사용 예시
df.shape # 결과 예시 : (8616, 2) # 이런 식으로도 사용 가능 df.shape[0] # 행 개수만 출력 : 8616 df.shape[1] # 열 개수만 출력 : 2 shape를 사용하지 않고 확인하는 방법print(f'데이터 크기 : {len(df):,}개 rows, {len(df.columns)}개 columns') # 결과 예시 : 데이터 크기 : 8,616개 rows, 2개 columns
dtypes
- 각 컬럼의 데이터 타입 확인
- 사용 예시
df.dtypes # 결과 예시 ''' datetime object pickup_count int64 dtype: object ''' # 특정 컬럼의 데이터 타입만 확인하기 df['datetime'].dtype # object 출력 df['pickup_count'].dtype # int64 출력 - pandas에서 object는 주로 문자열(string)을 의미함
- 시계열 분석에는 적합하지 않으므로 시간 데이터를 제대로 활용하려면
datetime64타입으로 변환해야함
- 시계열 분석에는 적합하지 않으므로 시간 데이터를 제대로 활용하려면
to_datetime()
- 다양한 시간 형식을 자동으로
datetime타입으로 변환 - pandas 함수
- 사용 예시
df['datetime'] = pd.to_datetime(df['datetime']) # 결과 예시 : object에서 datetime64[ns]로 변경됨 datetime64[ns]는 pandas에서 시간 데이터를 다루는 데 최적화된 타입이다.- 여기서
[ns]는 nanosecond(나노초) 단위까지 시간 저장이 가능하다는 의미
- 여기서
index
- 데이터프레임에서 행을 구별하는 기준인 인덱스 확인 가능
- 사용 예시
df.index # 결과 예시 : RangeIndex(start=0, stop=8616, step=1) # 특정 행의 인덱스 값 확인 예시 df.index[0] # 첫 번째 행의 인덱스 값 : 0 df.index[-1] # 마지막 행의 인덱스 값 : 8615 - 기본적으로 인덱스는 0부터 시작하는 숫자(RangeIndex)로 자동 생성
- 시계열 데이터에선
datetime컬럼을 인덱스로 설정하는 것이 일반적임
- 시계열 데이터에선
set_index()
- 특정 컬럼을 인덱스로 세팅
- 사용 예시
df_datetime = df.set_index('datetime') # 결과 예시 : 숫자인덱스가 사라지고 datetime 컬럼이 인덱스로 세팅됨
info()
- 데이터 정보 확인
- 사용 예시
df.info() # 결과 예시 ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 8616 entries, 0 to 8615 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 datetime 8616 non-null datetime64[ns] 1 pickup_count 8616 non-null int64 dtypes: datetime64[ns](1), int64(1) memory usage: 134.8 KB '''
describe()
- 수치형 데이터의 기본적인 통계 요약 정보 제공
- 사용 예시
df.describe() # 특정 컬럼의 통계 확인 df['pickup_count'].describe() # 결과 예시 ''' count 8616.000000 mean 219.842038 std 171.556516 min 0.000000 25% 39.000000 50% 228.000000 75% 359.000000 max 830.000000 Name: pickup_count, dtype: float64 ''' -
기본 통계 값들
통계 요약 정보 의미 count 전체 행 개수 (결측값이 없는 데이터 개수) mean 평균값 std 표준편차 (값의 변동성, 평균에서 얼마나 퍼져 있는지) min 최소값 25% 1사분위수 (하위 25%) 50% 중앙값 (전체 중 정중앙) 75% 3사분위수 (상위 25%) max 최대값
resample()
- Datetime Index를 원하는 주기로 나누어줌 (시계열 데이터 분석에 주로 사용)
- 사용 예시
df.resample(rule, axis=0, closed=None, label=None, convention='start', kind=None, loffset=None, base=None, on=None, level=None, origin='start_day', offset=None) # 1분 간격으로 1~10의 값을 가지는 데이터를 3분(3T or 3min) 간격으로 리샘플링 df.resample(rule='3T') # 값 합치기 추가 df.resample(rule='3T').sum() # sum() 뿐만 아니라 prod(), mean() 등 객체간 연산에 이용되는 모든 메서드 가능 -
매개변수 설명
매개변수 values 설명 rule 10T, M, … 리샘플링 할 기준. 단위로는 Y,M,D,H,T(min),S등을 조합하여 사용할 수 있다.axis 0, 1, … 리샘플링할 축 closed left, right 간격의 시작과 끝 중 어느부분을 닫을지 표시. 기본적으로 왼쪽(시작)이다. convention start, end, s, e PeriodIndex의 경우에만 규칙의 시작 또는 끝을 사용할지 여부를 제어한다. kind timestamp, period 결과 인덱스를 Date TimeIndex로 변환하려면 ‘timestamp’를 전달, PeriodIndex로 변환하려면 ‘period’를 전달 loffset 리샘플링된 시간 레이블을 조정하는 인수로 현재는 미사용 ( offset인수로 대체)base 리샘플링한 데이터의 간격의 원점을 지정, 현재는 미사용 ( origin인수로 대체)on 인덱스가 아닌 열 기준으로 리샘플링을 시도할 경우, 해당 열의 이름을 지정하는 인수 level 멀티인덱스의 경우 리샘플링할 인덱스의 레벨을 지정 origin epoch, start, start_day, end, end_day / Timestamp 데이터 간격의 원점을 지정 offset origin의 값에 시간 오프셋을 더해줌 - 매개변수 추가 설명
- closed
- 왼쪽(left)은 시작값 포함, 종료값 미포함(01:00 ≤ x < 02:00)이고, 오른쪽(right)은 시작값 미포함, 종료값 포함(01:00 < x ≤ 02:00)을 의미
- origin의 값들
epoch: 1970-01-01을 기준으로 간격 설정start: 인덱스의 첫 번째 값을 기준으로 간격 설정start_day: 인덱스의 첫 번째 값이 포함되는 날의 자정을 기준으로 간격 설정end: 인덱스의 마지막 값을 기준으로 간격 설정end_day: 인덱스의 마지막 값이 포함되는 날의 자정을 기준으로 간격 설정Timestamp: 지정한 시간을 기준으로 간격 설정
- closed
isnull()
- 데이터프레임에서 각 셀이 결측치인지 아닌지 확인
- Boolean 값으로 반환
- True: 결측치
- False: 결측치 X
- 사용 예시
train.isnull() # 결과 예시 : 데이터프레임의 각 값(value)들이 T/F 값으로 반환 # sum()을 사용하여 컬럼별 결측치 개수를 확인할 수 있다. train.isnull().sum() # 결과 예시 ''' index 0 gender 0 car 0 reality 0 child_num 0 income_total 0 income_type 0 edu_type 0 family_type 0 house_type 0 days_birth 0 days_employed 0 flag_mobil 0 work_phone 0 phone 0 email 0 job_type 321 family_size 0 begin_month 0 credit 0 dtype: int64 '''
mode()
- 최빈값을 찾아내는 함수
- 최빈값은 가장 자주 등장하는 값을 의미한다.
- 사용 예시
# job_type 칼럼의 최빈값 찾기 mode_value = train['job_type'].mode()[0] mode_value # 결과 예시 : 'Laborers'
fillna()
- 결측치 대체
- 사용 예시
# 결측치를 최빈값으로 대체합니다. train['job_type'] = train['job_type'].fillna(mode_value)
duplicated()
- 데이터프레임 내에서 중복된 행을 찾는 함수
- 각 행이 이전에 나온 행과 중복되는지 확인한다.
- 이전에 등장한 행이 있다면 True, 아니라면 False 반환
- 사용 예시
df.duplicated()
str.contains
- 데이터프레임의 각 행에서 지정된 패턴 또는 문자열이 존재하는지 확인
- Boolean 값을 반환
- 패턴이 맞을 경우 True, 아닐 경우 False
- 사용 예시
# '법규위반' 열에서 '안전' 단어가 포함된 경우 찾기 pattern = r'안전' train['법규위반_안전'] = train['법규위반'].str.contains(pattern)패턴에 사용되는
r은 raw string을 나타낸다. 문자열 내에 특수시퀀스(\s,\w,\등)가 특별한 처리 없이 문자 그대로 취급되도록 한다.
str.replace
- 문자열에서 원하는 패턴을 찾아 다른 문자열로 치환
- 정규표현식 이용 가능
- 사용 예시
# '도로형태' 열에서 ' - ' 이후 문자열 제거 pattern = r'\s-\s.*' train['도로형태_대분류'] = train['도로형태'].str.replace(pattern, '', regex=True)
str.extract
- 패턴과 일치하는 부분을 추출
- 사용 예시
pattern = r'(남구|달서구)' # '남구' 또는 '달서구'를 추출하고, 해당되지 않는 경우 '기타'로 표시 train['시군구_특정'] = train['시군구'].str.extract(pattern) train['시군구_특정'] = train['시군구_특정'].fillna('기타')
Leave a comment