TIL(Today I Learned)
1️⃣ 데이터 분석 입문 1
Pandas 기초
- 데이터 분석을 위한 핵심 Python 라이브러리
- 다양한 데이터 형식 지원:
- CSV, Excel, SQL, JSON, parquet 등 다양한 형식의 데이터 처리 가능
- 데이터 조작 기능:
- 데이터 필터링, 그룹화, 병합, 피벗 테이블 등 강력한 데이터 조작 기능을 제공
- 결측치 처리:
- 결측치(NaN) 처리 기능이 내장
- 불러오기: 관례적으로 pd라는 별칭을 사용
- 다양한 데이터 형식 지원:
import pandas as pd
import numpy as np # 수치 계산을 위해 보통 함께 불러온다
DataFrame (데이터프레임)
- 정의: 행과 열이 있는 2차원 표(테이블) 형태
- 구조: Index(행 이름) + Columns(열 이름) + Values(데이터)
- 생성: 딕셔너리({})를 활용하면 직관적
df = pd.DataFrame(
{
"Name": [
"Braund, Mr. Owen Harris",
"Allen, Mr. William Henry",
"Bonnell, Miss Elizabeth",
],
"Age": [22, 35, 58],
"Sex": ["male", "male", "female"],
}
)
df
# Out:
# Name Age Sex
# 0 Braund, Mr. Owen Harris 22 male
# 1 Allen, Mr. William Henry 35 male
# 2 Bonnell, Miss Elizabeth 58
Series (시리즈)
- 정의: 데이터가 일렬로 늘어선 1차원 형태. (엑셀의 '열(Column) 하나'와 같다.)
- 구조: Index(색인) + Value(값)
df["Age"]
# Out
# 0 22
# 1 35
# 2 58
# Name: Age, dtype: int64
인덱싱 (Indexing)
- loc[행이름, 열이름]: Label(이름) 기준. "사람이 부르는 이름표"
- iloc[행번호, 열번호]: Integer(정수) 기준. "컴퓨터가 세는 순서"

# 1) loc: 행 이름이 'P2'인 데이터의 '온도' 열 선택
temp_p2 = df.loc['P2', '온도']
print(temp_p2) # 결과: 26.1
# 2) iloc: 0번째 행, 1번째 열 선택
first_val = df.iloc[0, 1]
print(first_val) # 결과: 25.5
열(Column) 선택하기
# 하나의 열만 선택 (Series 형태)
col_temp = df['온도']
# 여러 개의 열을 선택 (DataFrame 형태 - 리스트로 전달)
col_multi = df[['공정명', '불량여부']]
조건부 필터링 (Boolean Indexing)
- 여러 조건 결합 가능(AND, OR)
# '불량여부'가 '불량'인 행만 필터링
fail_data = df[df['불량여부'] == '불량']
# 온도가 25.0도 이상인 데이터만 필터링
high_temp = df[df['온도'] >= 25.0]
- isin(): 특정 리스트 안에 포함된 데이터 찾기
# 공정명이 'A-1' 또는 'C-3'인 데이터만 필터링
specific_process = df[df['공정명'].isin(['A-1', 'C-3'])]
데이터 가공 및 변형: Manipulation
- 컬럼 추가
# 모든 행에 'Korea' 입력 (Broadcasting)
df['국가'] = 'Korea'
# 기존 '전압'에 1.1을 곱한 '보정전압' 컬럼 추가
df['보정전압'] = df['전압'] * 1.1
- 결측치(NaN) 처리: null, NA, NaN
# df.isnull()
df.isnull().sum() # 컬럼별 결측치 개수 합계
df.iloc[0,0] = None # 결측치 추가
# 결측치가 하나라도 있는 행은 모두 삭제
df_clean = df.dropna()
df.iloc[0,0] = None # 결측치 추가
# 전압의 평균값 계산
mean_volt = df['전압'].mean()
print(mean_volt)
# '전압' 컬럼의 빈칸(NaN)을 평균값으로 채우기
df['전압'] = df['전압'].fillna(mean_volt)
2️⃣Python 알고리즘 주요 문제
문제1
- 문제 설명 : 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분 문자열 중, 이 부분 문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return
- 제한 사항 :
- 1 ≤ p의 길이 ≤ 18
- p의 길이 ≤ t의 길이 ≤ 10,000
- t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.
- 입출력 예 :

- 문제 접근 : count를 선언한 뒤 문자열 t의 길이에서 문자열 p의 길이를 빼고 1을 더한 길이의 반복문을 순회 한 뒤 슬라이싱을 통해 부분문자열을 구하고 조건에 따라 count의 수를 1씩 늘려주면 될 것 같다.
- 코드
def solution(t, p):
count = 0
for i in range(len(t)-len(p)+1):
sub = t[i:i+len(p)]
if int(sub) <= int(p):
count += 1
return count
문제2
- 문제 설명 : 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
- 제한 사항
- 3 ≤ number의 길이 ≤ 13
- -1,000 ≤ number의 각 원소 ≤ 1,000
- 서로 다른 학생의 정수 번호가 같을 수 있습니다.
- 입출력 예

- 문제 접근 : 입력받은 정수 배열 n의 길이를 구한 뒤 3개의 반복문을 통해 순환시킨 뒤 각 인덱스의 number값이 0이 되는 조건을 비교하면 될 것 같다.
- 코드
def solution(number):
answer = 0
n = len(number)
for i in range(n-2):
for j in range(i+1, n-1):
for k in range(j+1, n):
if number[i]+number[j]+number[k] == 0:
answer+=1
return answer
💡 느낀점
본격적으로 Pandas의 다양한 함수에 대해 알아보고 실습 문제를 풀어보며 활용 가능한 방향이 무궁무진 할 것 같다고 느꼈다. 파이썬 알고리즘 문제의 난이도가 점점 높아짐에 따라 함수의 활용 외에 지문에서 수학적 패턴을 도출하는 것에 어려움을 느꼈다. 다양한 알고리즘 문제를 보고 오래 고민하는 절차를 통해 분석 능력을 기를 예정이다.
'데이터 분석 입문' 카테고리의 다른 글
| Chapter.2 데이터 분석 입문(6) (0) | 2026.04.01 |
|---|---|
| Chapter.2 데이터 분석 입문(5) (0) | 2026.03.31 |
| Chapter.2 데이터 분석 입문(4) (0) | 2026.03.30 |
| Chapter.2 데이터 분석 입문(3) (0) | 2026.03.27 |
| Chapter.2 데이터 분석 입문(2) (0) | 2026.03.26 |