1. apply 사용하기
- Series나 DataFrame에 구체적인 로직을 적용하고 싶을때 사용
- apply를 적용하기 위해 별도의 함숙가 먼저 정의되야 함
- 작성된 함수를 apply에 매개변수로 전달함
- 데이터 확인
df.head()
![]() |
- 문자열의 성별정보를 숫자로 변환하기
# 성별이 남자는 1, 여자는 0으로 변환(loc를 사용)
df.loc[df['gender'] == '남자', 'gender'] = 1
df.loc[df['gender'] == '여자', 'gender'] = 0
df.head()
![]() |
- 데이터 다시 담기
df = pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/idol.csv')
df.head()
![]() df에 첫파일을 다시 담기 |
- 문자열의 성별정보를 숫자로 변환하는 함수를 만들기
# 문자열 성별 정보를 숫자로 변환하는 함수
# '성별' 열의 각 값이 함수에 전달 ('남자'를 1로 / '여자'를 0으로 변환 )
def male_or_female(x):
if x == '남자' :
return 1
elif x == '여자':
return 0
else:
return None
"""
인자:
x (str): 성별 정보 ('남자' 또는 '여자')
반환값:
int: '남자'이면 1, '여자'이면 0
None:
# df의 '성별' 열에 대해 male_or_female 함수를 적용
df['성별'].apply(male_or_female)
# 람다 함수로 표현
df['성별'].apply(lambda x:1 if x=='남자' else 0)
# 파생변수 만들기
df['New성별']=df['성별'].apply(lambda x:1 if x=='남자' else 0)
df.head()
![]() ![]() |
2. map 사용하기
- 딕셔너리를 통해 데이터와 같은 키의 값을 적용
- 원본 데이터 다시 받기
df = pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/idol.csv')
df.head()
![]() |
- 원본 데이터 다시 받기
# 성별 정보를 숫자로 매핑하기 위한 사전 정의
map_gender = {'남자':1, '여자':0}
# df의 '성별' 열에 대해 map_gender 사전을 사용하여 성별을 숫자로 변환
# '성별' 열의 각 값이 사전의 키('남자' 또는 '여자')에 따라 1 또는 0으로 매핑
df['성별'].map(map_gender)
![]() |
- 데이터프레임의 산술연산
: 행의 개수가 다른 경우 빠진 데이터를 NaN으로 취급하기 문에 연산이 안됨
# DataFrame을 생성 : 3 열 5행
df = pd.DataFrame({
'파이썬' : [60, 70, 80, 86, 95],
'데이터분석' : [40, 60, 70, 55, 87],
'머신러닝딥러닝' : [60, 70, 80, 86, 95]
})
# DataFrame을 출력
df
# '파이썬' 열의 데이터 타입을 확인
df['파이썬'].dtypes
# '파이썬' 열의 데이터 타입을 확인합니다. 결과는 'Series' 타입입니다.
type(df['파이썬'])
![]() ![]() |
- '파이썬', '데이터분석', '머신러닝딥러닝' 열의 값을 모두 더하기
# '파이썬', '데이터분석', '머신러닝딥러닝' 열의 값을 모두 더합니다.
df['파이썬'] + df['데이터분석'] + df['머신러닝딥러닝']
![]() |
- df에 총점, 평균이라는 파생변수를 만들고 총점, 평균을 구해서 저장
# df에 총점, 평균이라는 파생변수를 만들고 파생변수에 총점, 평균을 구해서 저장
df['총점'] = df['파이썬'] + df['데이터분석'] + df['머신러닝딥러닝']
df['평균'] = df['총점'] / 3
df
![]() ![]() ![]() |
# df의 '파이썬' 열의 모든 값을 더한 합계를 반환
df['파이썬'].sum() # df['파이썬'].sum(axis=0)
# df의 '파이썬' 열의 모든 값의 평균을 반환
df['파이썬'].mean()
# df의 모든 열에 대해 각 열의 합계를 계산하여 반환
# 각 열의 합계는 열의 모든 값을 더한 값
df.sum()
#df의 모든 열에 대해 각 열의 평균을 계산하여 반환
# 각 열의 평균은 열의 모든 값의 평균입니다.
df.mean()
![]() ![]() |
# DataFrame을 생성
df1 = pd.DataFrame({
'파이썬' : [60, 70, 80, 86, 95],
'데이터분석' : [40, 60, 70, 55, 87],
'머신러닝딥러닝' : [60, 70, 80, 86, 95]
})
df2 = pd.DataFrame({
'파이썬' : ['D','C', 'B', 'B', 'A'],
'데이터분석' : [40, 60, 70, 55, 87],
'머신러닝딥러닝' : [60, 70, 80, 86, 95]
})
df1 + df2 #에러
df1 + 10
df2 + 10 #에러
![]() ![]() ![]() ![]() |
# 새로운 DataFrame을 생성
df1 = pd.DataFrame({
'데이터분석':[40, 60, 70, 55, 87],
'머신러닝딥러닝':[35, 40, 30, 80, 55]
})
df2 = pd.DataFrame({
'데이터분석':[40, 60, 70, 55],
'머신러닝딥러닝':[35, 40, 30, 80]
})
# 행의 개수가 다를 경우 빠진 데이터를 NaN으로 취급하기 때문에 연산이 안됨
df1 + df2
![]() ![]() |
3. select_dtypes
- 원본 데이터 다시 가져오기
df = pd.read_csv('/content/drive/MyDrive/1. KDT/5. 데이터 분석/데이터/idol.csv')
df.head()
![]() |
- 데이터 프레임 정보보기
df.info()
![]() |
- select_dtypes
df.select_dtypes(include='object')
# 문자열 컬럼만 가져오기
df.select_dtypes(exclude='object')
# 문자열 컬럼만 뺴고 가져오기
![]() |
- 문제: 문자열을 가지고 있는 컬럼의 이름만 저장하여 출력
str_cols = df.select_dtypes(include='object').columns
str_cols
df[str_cols]
![]() |
4. 원 핫 인코딩
- 원 핫 인코딩(One Hot Encoding)
: 한개의 요소는 1이고, 나머지 요소는 0으로 만들어서 카테고리형을 표현하는 방법
( 예시 ) df['형액형'] * 머신러닝/딥러닝 알고리즘에 널어 데이터를 예측하려고 하다면 라벨 인코딩을 하여 수치 데이터로 변환 * 컴퓨터는 값들 간의 관계를 스스로 형성하게 됨 * 만약 B형 -> 1, AB형은 2라는 값을 가지고 있을 때, 컴퓨터는 'B형 + AB형 = 0형'라는 이상한 관계를 맺을 수도 있음 이때, 서로의 관계를 끊어주는게 원핫인코딩 해결방법(원핫인코딩): column들을 분할해주고 1개의 column에는 1, 나머지 column에는 0으로 넣어줌으로 'A, B, AB, O형의 관계는 서로 독립적이다'라는 카테고리로 표현해주는 방식을 사용 |
- 혈액형 정보를 숫자로 매핑
# 혈액형 정보를 숫자로 매핑하기 위한 사전 정의
blood_map = {'A':0, 'B':1, 'AB':2, 'O':3}
# 데이터프레임 df의 '혈액형' 열에 대해 blood_map 사전을 사용하여 혈액형을 숫자로 변환
# '혈액형' 열의 각 값이 사전의 키('A', 'B', 'AB', 'O')에 따라 0, 1, 2, 3으로 매핑
df['혈액형_code'] = df['혈액형'].map(blood_map) # 라벨 인코딩
df.head()
![]() |
- pd.get_dummies(): 원 핫 인코딩 적용
# get_dummies(): 원 핫 인코딩을 적용
pd.get_dummies(df['혈액형_code'])
![]() |
- 고유 값에 대해 새로운 이진 열
('혈액형_code_0', '혈액형_code_1', '혈액형_code_2', '혈액형_code_3')을 생성
# 데이터프레임 df에서 '혈액형_code' 열에 대해 원-핫 인코딩을 적용
# pd.get_dummies 함수는 지정된 열의 각 고유 값에 대해 새로운 이진 열을 생성
# 원-핫 인코딩이 적용된 열은 '혈액형_code_0', '혈액형_code_1', '혈액형_code_2', '혈액형_code_3' 형식의 열로 변환
df = pd.get_dummies(df, columns=['혈액형_code'])
df
![]() |
- 데이터 테이블 확인
df.info()
![]() |
'데이터분석 > 판다스' 카테고리의 다른 글
07. 등수, 날짜타입 (0) | 2024.05.24 |
---|---|
06. 데이터프레임 합치기 (0) | 2024.05.24 |
05. 그룹, 중복값제거 (0) | 2024.05.24 |
04. 행, 열 추가 삭제, 통계함수 (0) | 2024.05.24 |
03. 결측값(NULL, NaN) (0) | 2024.05.24 |