@@ -141,4 +141,100 @@ df['rolling_avg'] = df['value'].rolling(window=3).mean()
141141| 5 | 2023-01-06 | 60 | [ 40, 50, 60] | (40+50+60)/3 = 50.0 |
142142| 6 | 2023-01-07 | 70 | [ 50, 60, 70] | (50+60+70)/3 = 60.0 |
143143
144- ㄴ
144+ ## 행 이동
145+ #### 각 행의 Temp 데이터를 한 칸씩 아래로 이동
146+ ``` python
147+ df[' Time Shift1' ] = df[' Temp' ].shift(1 )
148+
149+ # 이동한 결과 값을 빼서 어제와의 온도 변화 % 구하기
150+ df[' pct change' ] = (df[' Time Shift1' ] - df[" Temp" ]) / df[' Temp' ]
151+ ```
152+
153+ # apply, map, 문자열
154+
155+ titanic_train.csv 사용
156+
157+ ## apply
158+ - 사용자 정의 함수를 ** 데이터에 적용** 할 때 사용
159+ - ** 레코드(행)** 단위로 사용자 정의 함수 적용
160+ - apply에 들어가는 함수는 반드시 ** 리턴** 이 있어야 한다.
161+
162+ #### 두 개의 다른 컬럼 값 비교
163+ - Pclass가 1이고, SibSp가 1이면 1, 아니면 0
164+
165+ ``` python
166+ def pclass_sibsp (row ): # 행 단위 계산
167+ if row[" Pclass" ] == 1 and row[" SibSp" ] == 1 :
168+ return 1
169+ else :
170+ return 0
171+
172+ df1.[" Pclass_sibsp_filter" ] = df1.apply(pclass_sibsp, axis = 1 ) # 열 방향으로 함수 적용
173+ ```
174+ -lamda 함수와 삼항연산자를 사용해서 만들기
175+
176+ ``` python
177+ df1[" pclass_sibsp_lambda" ] = df1.apply(
178+ lambda row : 1 if row[" Pclass" ] == 1 and row[" SibSp" ] == 1 else 0 , axis = 1
179+ )
180+ ```
181+ #### 한 개의 컬럼
182+ - 성인인지 아닌지
183+
184+ ``` python
185+ import numpy as np # nan값 리턴 때문에
186+
187+ def adult (age ):
188+ if age >= 19 :
189+ return 1
190+ elif age < 19 :
191+ return 0
192+ else :
193+ return np.nan
194+
195+ df1[" adult_yn" ] = df1[" Age" ].apply(adult) # 시리즈 하나에서만 비교기 때문에 axis = 0
196+ ```
197+ - lambda 함수와 삼항연산자를 사용해서 만들기
198+
199+ ``` python
200+ df1[" adult_yn" ] = df1[" Age" ].apply(lambda row : 1 if age >= 19 else 0 if age < 19 else np.nan)
201+ ```
202+ ## map
203+ - apply : 기능 실행 / map : mapping(맞춰준다, 1대1 변환 느낌)
204+ - 값을 특정 값으로 치환할 때 사용
205+ - logic적인 부분이 들어가면 map을 쓰지 못 함
206+
207+ #### map -> dict
208+ ``` python
209+ gender_map = {
210+ " male" : " 남자" ,
211+ " female" : " 여자"
212+ }
213+ df1[" Sex_kr" ] = df1[" Sex" ].map(gender_map)
214+ ```
215+ ## 문자열 시리즈 다루기
216+ - 문자열 형태의 시리즈에서만 가능!!!
217+
218+ 메소드|설명|
219+ | ---| ---|
220+ | ` .str.contains(문자열) ` | 문자열을 포함하고 있는지 유무|
221+ | ` .str.replace(기존문자열, 대치문자열) ` | 문자열 대치|
222+ | ` .str.split(문자열, expand=True/False, n=개수) ` | 특정 문자열을 기준으로 쪼개기|
223+ | ` .str.lower() ` | 소문자로 바꾸기|
224+ | ` .str.upper() ` | 대문자로 바꾸기|
225+
226+ #### 이름에 'Miss'가 들어간 사람만 찾기
227+ ``` python
228+ # 문자열을 담고 있는 series 반환
229+ df2[" Name" ].str.contains(" Miss" )
230+ ```
231+ - mask 활용
232+ ``` python
233+ miss_mask = df2[" Name" ].str.contains(" Miss" )
234+ df2.loc[miss_mask]
235+ ```
236+ #### 시리즈 값의 ","를 바꾸기
237+ ``` python
238+ df2[" Name" ] = df2[" Name" ].str.replace(" ," , " ⭐️" )
239+ ```
240+
0 commit comments