💡파이선에서 key error가 난다면- 이름이 정확하지 않다는 뜻이다. 컬럼이름이 정확한지 다시한번 확인해보자
오늘은 판다스 복습을 했다. 저번 튜터님께 상담했을 때 강의 때 했던 코드랑 실제로 쓸 수 있으면 된다고 하셔서&이번에 머신러닝 개인과제 나왔는데, 판다스 쓰는 문제첫번째부터 막혀서 복습을 해야겠다 싶어서 복습을 하게 되었다.
복습하면서 다시 들으니까 이해가 이제서야 되고, 전에 헷갈렸던 부분들을 정리도 하고 실제로 코드도 쳐보면서 이해하는 시간을 가졌다.
split함수 복습하다가 실습문제 풀어보고 싶어서 쳇지피티에게 부탁해서 문제 만들어 풀어보았다.
<🧠 문제:>
다음과 같은 문자열이 있어:
python
복사
편집
log = "INFO - 2025/05/07 10:15:33 - User logged in - user123"
이 문자열에서 다음 정보를 각각 추출해보세요:
날짜: "2025/05/07"
시간: "10:15:33"
사용자 ID: "user123"
# 내가 작성한 코드
log = "INFO - 2025/05/07 10:15:33 - User logged in - user123"
splited = log.split(' - ')
splited
여기까지는 작성을 했는데, 날짜랑 시간을 또 쪼개려고 시도를 했다.
splited[1] = splited[1].split(' ')
splited[1]
요롷게. 근데 에러가 떴는데, AttributeError: 'list' object has no attribute 'split'란다.
🧱👉🏼(blocker): 리스트라서 split함수를 사용할 수가 없었다. 그래서.. 도대체 어떻게 해야 할지 모르겠었다.
-> split()함수는 문자열에서만 사용이 가능하다고 한다.
그래서 저 리스트에 담겨있는 것만 가지고 나와서 split해야 한다.
=>
date, time = datetime[0], datetime[1]
date, time
#전체 정답 코드
log = "INFO - 2025/05/07 10:15:33 - User logged in - user123"
splited = log.split(' - ')
date_time = splited[1] # '2025/05/07 10:15:33'
user_id = splited[3] # 'user123'
# 날짜와 시간 분리
date, time = date_time.split()
print("날짜:", date) # 2025/05/07
print("시간:", time) # 10:15:33
print("사용자 ID:", user_id) # user123
저번에 틀렸던 라이브러리 과제를 다시 풀어보았다.
3. 조건에 맞는 데이터 추출하기
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
round(df.groupby('Destination')['Price'].agg(['mean','median']),1)
df2 = df.groupby(['Airline','Total_Stops'])['Route'].nunique()
df2.to_frame()
#여기까지는 풀었는데 "인덱스 재정렬"을 어떻게 해야하는지 모르겠었다.
->찾아봤더니 판다스에 reset_index()라는 기능이 있었다. 그래서 그것만 해주면 됨. 기본값은 drop=False이고 이 말은 기존 인덱스를 컬럼으로 남기는 것이고 drop=True는 기존 인덱스를 버리고 새 인덱스를 부여한다는 뜻이다.
df2 = df.groupby(['Airline','Total_Stops'])['Route'].nunique().reset_index()
#이렇게도 쓸 수 있고 이렇게도 쓸 수 있다.
df2 = df.groupby(['Airline','Total_Stops'])['Route'].nunique()
df2 = df2.reset_index(drop=False)
필수 4. 조건에 맞는 데이터 추출하기2
pd.pivot_table(df, index=['Source','Destination'], columns='Airline', aggfunc='count')#.sort_values()
#카운트 값을 기준으로 내림차순 정렬 어떻게 하는지 모르겠다. sort_values를 써보았는데 에러가 난다. 그래서 #처리해 줌.
#솔직히 이 값도 맞는지 모르겠음. 아.. 나의 지피티선생에게 물어보아야겠다.
#필터링
df_flitering = (df[df['Airline'] == 'Air India'] & df[df['Price'] >= 7000])
🥲이렇게 했는데 에러남.
‼️TypeError: unsupported operand type(s) for &: 'str' and 'str'
알아보니 판다스에서 &조건은- 불리언타입,시리즈에서만 사용이 가능하다고 한다. 내 코드를 보면 -> 데이터 프레임과 데이터프레임끼리 &로 묶어주는건데, 그래서 불가하다는 것. 저 타입에러도 보면 문자열끼리는 &연산자를 쓸 수 없다는 뜻임. 데이터프레임을 문자열로 인식하는 것 같다.
그래서 시리즈 타입에서 써주어야 함. + 괄호로 꼭 묶어주어야 함
#데이터 보기
df['Airline']을 하게 되면 시리즈 형태로 저 컬럼에 해당하는 행들만 추출된다.
#불리언 값
df['Airline'] == 'Air India' 를 하게 되면 에어 인디아에 해당하는 행은 True,
아닌 행은 False로 반환된다.(불리언값으로 반환된다)
💡비교연산자를 사용하게 되면 비교연산자가 비교하는 행과 하나씩 비교하면서 불리언값을 반환하게 된다.
저 조건을 하나 묶어주고 &로 연결해줘서 다른 조건을 써준다.
#최종 코드
df[(df['Airline'] == 'Air India') & (df['Price'] >= 7000)]
-4번의 첫번째를 누군가 알려주었으면 좋겠다. 이거는 정답코드 없으려나..?