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__)
'Data Science > 실습' 카테고리의 다른 글
DS 실습 15- 로지스틱 회귀분석 (0) | 2024.12.07 |
---|---|
DS 실습 13~14- 단순/다중 회귀분석 (0) | 2024.12.07 |
DS 실습 12- 비계층적 군집분석(KMeans,MinMaxScaler,StandardScaler,shilhouette_score) (1) | 2024.12.06 |
DS 실습 11- 상관분석(Pandas.corr, scipy) (0) | 2024.12.05 |
DS 실습9~10-데이터전처리(정렬 및 변환-crosstab, sort_values, melt/ def) (0) | 2024.12.01 |