Skip to content

Commit beac545

Browse files
committed
Update 2025-01-23-[Pandas] 07. 데이터가공 날짜.md
1 parent aab1475 commit beac545

File tree

1 file changed

+97
-1
lines changed

1 file changed

+97
-1
lines changed

_posts/2025-01-23-[Pandas] 07. 데이터가공 날짜.md

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)