1. 데이터 프레임 합치기
- concat() : 데이터를 합침
판다스 1.0.0 버전부터는 sort 매개변수의 기본값이 sort=True에서 sort=False로 변경되었습니다. sort=False일 경우 인덱스 순서가 유지되어 기존 데이터프레임의 순서대로 합쳐집니다. 하지만 명시적으로 sort=True를 설정하여 정렬을 요구하는 경우에는 인덱스에 따라 정렬이 이루어집니다.
- reset_index() : index를 새롭게 적용⭐
- reset_index(drop = True) : 기존의 index를 없앰
- pd.concat([df1, df2], axis = 1) : 같은 index를 기준으로 열을 결합함.
왼쪽 위 : pd.concat([df.1, df_copy]) / 오른쪽 위 : df.concat.reset_index(drop = True)
아래 : pd.concat([df.1, df2], axis = 1)
- merge() : 판다스에서 데이터프레임을 병합(merge)하는 데에 사용되는 함수로, SQL의 JOIN 연산과 유사한 동작을 합니다. how: 병합 방법 ('left', 'right', 'outer', 'inner' 중 하나) / on: 기준이 되는 열(컬럼)의 이름 또는 여러 열의 이름.
pd.merge(df1, df_right, on='이름',how='left')
pd.merge(df1, df_right, on='이름',how='inner')
- rank() : 데이터프레임 또는 시리즈의 순위를 매기는 함수. 기본값은 ascending
df1['브랜드순위'] = df1['브랜드평판지수'].rank()
df1['브랜드순위'] = df1['브랜드평판지수'].rank(ascending=False)
- astype() : 특정열의 자료형을 변경⭐
df1['브랜드순위'] = df1['브랜드순위'].astype(int)
2. 날짜타입 사용하기
- to_datetime() : Object 타입에서 datetime타입으로 변환
- .dt.year / dt.month / dt.day / dt.hour / dt.minute / dt.second / dt.dayofweek( 0~6 : 월요일~ 일요일)
df['birthday'] = pd.to_datetime(df['birthday'])
Name: birthday, dtype: datetime64[ns]
df['birthday'].dt.day
0 13
1 18
2 10
3 30
4 23
5 1
6 9
7 26
8 4
9 22
10 9
11 30
12 21
13 8
14 9
15 1
Name: birthday, dtype: int64
df['birthday'].dt.isocalendar().week
// 1년 중에 몇번째 주인지 출력
0 41
1 33
2 50
3 52
4 29
5 36
6 32
7 35
8 49
9 12
10 10
11 13
12 29
13 23
14 10
15 52
Name: week, dtype: UInt32
3. apply 사용하기
apply() 함수는 판다스에서 데이터프레임이나 시리즈의 각 원소에 함수를 적용하는 데 사용되는 유용한 메서드입니다. 이 함수를 사용하면 사용자가 정의한 함수나 내장 함수를 데이터프레임의 행이나 열에 적용할 수 있습니다. apply를 적용하기 위해서는 별도의 함수가 먼저 정의되어야 합니다. 작성된 함수를 apply에 매개변수로 전달합니다.
# 성별이 남자는 1, 여자는 0으로 변환(loc를 사용)
df.loc[df['gender']=='남자', 'gender'] = 1
df.loc[df['gender']=='여자', 'gender'] = 0
def male_or_female(x):
if x == '남자':
return 1
elif x == '여자':
return 0
df['성별'].apply(male_or_female)
0 1
1 1
2 1
3 1
4 0
5 1
6 1
7 0
8 1
9 1
10 0
11 1
12 1
13 1
14 1
Name: 성별, dtype: int64
df['성별'].apply(lambda x: 1 if x =='남자' else 0)
0 1
1 1
2 1
3 1
4 0
5 1
6 1
7 0
8 1
9 1
10 0
11 1
12 1
13 1
14 1
Name: 성별, dtype: int64
- map 사용하기
map_gender = {'남자': 1, '여자': 0}
df['성별'].map(map_gender)
0 1
1 1
2 1
3 1
4 0
5 1
6 1
7 0
8 1
9 1
10 0
11 1
12 1
13 1
14 1
Name: 성별, dtype: int64
4. 데이터프레임의 산술연산
df = pd.DataFrame({
'파이썬': [60, 70, 80 ,86 , 95],
'데이터분석': [40, 60, 70, 55, 88],
'머신러닝딥러닝': [90, 40, 30, 100, 55]
})
df['파이썬'] + df['데이터분석'] + df['머신러닝딥러닝']
0 190
1 170
2 180
3 241
4 238
dtype: int64
df['총점'] = df['파이썬'] + df['데이터분석'] + df['머신러닝딥러닝']
파이썬 데이터분석 머신러닝딥러닝 총점
0 60 40 90 190
1 70 60 40 170
2 80 70 30 180
3 86 55 100 241
4 95 88 55 238
df['파이썬'].sum() = df['파이썬'].sum(axis=0)
// 391
df['파이썬'].mean()
// 78.2
df.mean()
파이썬 78.200000
데이터분석 62.600000
머신러닝딥러닝 63.000000
총점 203.800000
평균 67.933333
dtype: float64
df1 = pd.DataFrame({
'파이썬': [60, 70, 80 ,86 , 95],
'데이터분석': [40, 60, 70, 55, 88],
'머신러닝딥러닝': [90, 40, 30, 100, 55]
})
df1 + 10 # 모든 요소에 10을 더함
파이썬 데이터분석 머신러닝딥러닝
0 70 50 100
1 80 70 50
2 90 80 40
3 96 65 110
4 105 98 65
df1 = pd.DataFrame({
'데이터분석': [40, 60, 70, 55, 88],
'머신러닝딥러닝': [90, 40, 30, 100, 55]
})
df2 = pd.DataFrame({
'데이터분석': [40, 60, 70, 55],
'머신러닝딥러닝': [90, 40, 30, 100]
})
df1 + df2
# 행의 갯수가 다른 경우 빠진 데이터를 NaN으로 취급하고 연산하지 않는다
데이터분석 머신러닝딥러닝
0 80.0 180.0
1 120.0 80.0
2 140.0 60.0
3 110.0 200.0
4 NaN NaN
5. select_dtypes
df.select_dtypes(include = 'object') # 문자열 컬럼만 가져오기
df.select_dtypes(exclude = 'object') # 문자열 컬럼만 빼고 가져오기
df.select_dtypes(exclude = 'object') +10 # 문자열 컬럼 제외한 값들에 모두 10 더하기
# 문자열을 가지고 있는 컬럼의 이름만 저장
str_cols = df.select_dtypes(include='object').columns
print(str_cols)
Index(['이름', '그룹', '소속사', '성별', '생년월일', '혈액형'], dtype='object')
6. 원 핫 인코딩(One Hot Encoding)
원 핫 인코딩은 한개의 요소는 1, 나머지 요소는 0으로 만들어 카테고리형을 표현하는 방법입니다. 예를 들어, 머신러닝/ 딥러닝에는 숫자형 데이터를 넣어야 하기 때문에 df['혈액형']을 머신러닝/딥러닝 알고리즘에 [ 'A': 0, 'B': 1, 'AB' : 2, 'O': 3 ]으로 넣어 데이터를 예측하려고 하면 컴퓨터는 값들간의 관계를 스스로 형성할 수 있습니다. B형은 1, AB형은 2라는 값을 가지고 있기 떄문에 컴퓨터는 'B형 + AB형 = 0형'이라는 이상한 관계를 맺을 수도 있습니다. 따라서 별도의 column들을 형성해주고 1개의 column에는 1, 나머지 column에는 0으로 넣어줌으로 'A, B, AB, O형의 관계는 서로 독립적이다'라는 카테고리로 표현해주는 방식을 사용합니다.
- "A"는 [1, 0, 0, 0]
- "B"는 [0, 1, 0, 0]
- "AB"는 [0, 0, 1, 0]
- "O"는 [0, 0, 0, 1]
✔️ 라벨 인코딩
blood_map = {'A': 0, 'B': 1, 'AB' : 2, 'O': 3}
df['혈액형_code'] = df['혈액형'].map(blood_map)
df.head()
이름 그룹 소속사 성별 생년월일 키 혈액형 브랜드평판지수 혈액형_code
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260 0
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947 0
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745 0
3 뷔 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501 2
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928 0
⭐ pd.get_dummies(): 원 핫 인코딩을 적용
pd.get_dummies(df['혈액형_code'])
0 1 2 3
0 1 0 0 0
1 1 0 0 0
2 1 0 0 0
3 0 0 1 0
4 1 0 0 0
df = pd.get_dummies(df, columns = ['혈액형_code'])
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 이름 15 non-null object
1 그룹 14 non-null object
2 소속사 15 non-null object
3 성별 15 non-null object
4 생년월일 15 non-null object
5 키 13 non-null float64
6 혈액형 15 non-null object
7 브랜드평판지수 15 non-null int64
8 혈액형_code_0 15 non-null uint8
9 혈액형_code_1 15 non-null uint8
10 혈액형_code_2 15 non-null uint8
11 혈액형_code_3 15 non-null uint8
dtypes: float64(1), int64(1), object(6), uint8(4)
memory usage: 1.1+ KB
'데이터 분석' 카테고리의 다른 글
가상 쇼핑몰 데이터 예제 (0) | 2023.12.16 |
---|---|
Matplotlib (0) | 2023.12.10 |
판다스2 (0) | 2023.12.08 |
판다스1 (0) | 2023.12.05 |
넘파이 (0) | 2023.11.28 |