Data Science/실습

실기시험 준비 Python 기초

에너지_2 2024. 12. 6. 23:58
728x90
반응형

DataFrame 객체

# arr_or
array([[0.00217286, 0.97222611, 1.10051618, 0.99907654, 0.859011  ,
        0.89337182, 0.46505065, 1.67512136, 0.75848875, 1.42281812,
        1.04913786, 1.36414132, 1.1309326 , 1.30456154, 1.52551612,
        0.64745381]])
#        
pd.DataFrame(arr_or, columns = df_job2.columns[2:])

 

데이터 색인, 필터링

인덱서

- df. loc [ row, column ]

- DataFrame 객체는 2차원 객체 -> 인덱서를 사용하면 [ ] 사이에 , 쓰는 것을 권장

- df 대괄호를 사용하여 내부 원소 접근 가능하나 인덱서 사용 권장

   ex) df['col1'][0]  -> df[column][row] 

필터링

- 인덱서 기반의 필터링 권장

- .isin() 메서드가 유용

- column 제거: df.drop( columns = [ , ] )

# ~ 표시는 값 반전시킴
df.loc[ ~(df_s['a'] == 100), ]
# 조건 2개 들어갈 때
df.loc[ (df_s['b']==400) | (df_s['b'] == 600), ] 
# 위 방법보다 간단하게 사용
df.loc[ df_s['b'].isin([400, 600]), ]

# column 제거 - df.drop
df.drop(columns= ['col1','col2'])
# column 제거 - df.loc
df.loc[ :, df.columns != 'col1']
 데이터 확인 및 증복 제거

- df.value_counts()pd.crosstab()normalize 인자를 활용한 비율 계산 가능

- 중복 제거: df.drop_duplicates()

# 각 값의 고유한 개수
df['col2'].value_counts()
# “normalize” 인자에 True를 할당하면 고유한 원소가 시리즈 객체에서 차지하는 비율
df['col2'].value_counts(normalize = True)
# crosstab

# 고유값 확인, (Series) 중복값 제거
df['col2'].unique()
# (Series, DataFrame) 중복값 제거
df.drop_duplicates()
df['col2'].drop_duplicates()
결측치

- 확인 : df.isna() 

- 채움 : df.fillna()

- 제거 : df.dropna()

# 결측치 값. 문제에서 사용한 적 있음
np.nan
# 전체 data 중 na 갯수
df.isna().sum().sum()
# 전체가 결측인 경우 제거. default: any (하나라도 있는 경우)
df.dropna(how = 'all')
# 각 변수별 결측치 대치값을 지정
df.fillna( value = {"col1": -1, "col2": -999} )
인덱스 조작

- df.reset_index( ) : 색인 초기화. 필터링 이후 or .groupby 메서드를 활용한 연산 이후에 유용

- df.set_index( 'column' ) : 해당 column을 가장 앞으로 옮긴다. 아래 예시 주로 사용

# 머신러닝/통계 모델링 시, 종속변수를 기존 위치에 관계없이 가장 앞으로 옮기는 코드
df_sub.set_index('Species').reset_index()

 

 

파생변수

 

 

데이터 활용

그룹화 ex) 날씨별,  

- .groupby  : 데이터를 그룹화하여 요약, 집계, 변환, 필터링 등 할 수 있음

#데이터 준비
data = {'Category' : ['A','B','A','B','C'],
        'Value' : [10, 20, 30, 40, 50],
        'Count' : [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

# 1. 그룹별 합계
# 계산Category별 Value 합계
df.groupby('Category')['Value'].sum().reset_index()
# 2. 그룹별 통계 요약 || 집계(agg) 연산. 다수 함수 사용
# Category별 Value의 평균, 최대값, 최소값 계산
df.groupby('Category')['Value'].agg(['mean','max','min'])
#각 컬럼별로 다른 함수 적용
df.groupby('Category').agg({'Value': 'max', 'Count': 'mean'})
#3. 그룹별 데이터 필터링
## 그룹의 합계가 50 이상인 그룹만 선택
df.groupby('Category').filter( lambda x: x['Value'].sum() >= 50)

 

정렬

- sort_values()

 

lambda

- crosstab(), pivot_table(), agg(), apply() 에 주로 사용

 

 

데이터 변환

속성 확인 및 변환
# 수치형에 문자를 붙이고 싶을 때
df['Sepal.Length'].astype('str') + 'cm'

#DataFrame 내 값 치환★
df.replace('no item', np.nan)

 

수치연산

.abs(): 절대값
.var(): 분산
.std(): 표준편차 , ddof = 1

.skew(): 왜도
.kurt(): 첨도

 

텍스트 처리: str 

- Series 객체 전용

- 수치형인 경우 .astype('str') 로 변환해서 사용

- 데이터 분리: str.split( , expand=True ) .add_prefix('split_')

      -> 분리할 게 없는 것은“None", "NaN" 데이터로 받음. 결측치 처리

- 문자 추출: .str.slice(0,1)  -> 첫번째 문자 추출

 

document view:   pd.Series.str.extract.__doc__

#데이터 생성
df = pd.DataFrame(dict(col1 = [100, 200, 300],
                         col2 = ["XX", "XY", "YY"],
                         col3 = [123, "1234-5678", "010-1234-5678"]))
#1. 데이터 변경 - replace
# 데이터 전체가 일치해야 변경
df['col2'].replace('X','Z')
# 데이터 일부가 일치해도 변경- str.replace
df['col2'].str.replace('X','Z')
#2.데이터 포함 여부- str.contains. return: True/False
df['col2'].str.contains('Y')
#3.데이터 분리 - str.split. return: list type
# 'expand=True'로, return dataFrame 으로 반환
#   df.columns: RangeIndex(start=0, stop=3, step=1)
df['col3'].str.split('-', expand=True)
# .add_prefix 은 dataFrame 객체의 변수명이 0,1,2.. 숫자로 들어와서 접두사 추가한다
#   df.columns: Index(['split_0', 'split_1', 'split_2'], dtype='object')
df['col3'].str.split('-', expand=True).add_prefix('split_')

 

시간처리

-  pd.to_datetime

 

 

wide form <-> long form

- melt() : 통계, 머신러닝 실시 전에 데이터 구조를 맞추기 위해

- pivot() : 데이터를 요약하거나 군집분석 실시 전 데이터 전처리

 

정규표현식

 

 

데이터 병합

.concat() 함수, .join() 메서드 또는 .merge() 메서드

두 개 이상의 데이터프레임 병합은 이어붙이기(concatenating)와 엮어내기(joining)

# 옆으로 이어 붙이기 axis = 1 , default = 0 일때는 아래로 이어 붙이기
pd.concat([df1, df2], axis = 1)

# 두 객체의 변수를 기준으로 합치는
df1.merge(df2, on = "ID")
# left join 인 경우 설정. default inner
df1.merge(df2, on = "ID", how = "left")

 

 

 

변수명 확인 및 변경

df. rename( columns = {'A' : 'AA', 'B' :'BB} )
# 컬럼 한꺼번에 변경, 순서오류발생 주의
df_s.columns = ['a','b','c'] 
# rename
df_s.rename(columns={'a':'xx',
                     'b': 'yy'})

 

 

기타 python 사용

# csv 파일 읽기
pd.read_csv('text.csv')

# document : 알고싶은것.__doc__
print(df.dropna.__doc__)

 

 

 

 

 

 

 

728x90
반응형