728x90
import pandas as pd
df = pd.DataFrame({'A': ['데이터 분석', '기본 학습서', '퇴근 후 열공'],
'B': [10, 20, 30],
'C': ['ab cd', 'AB CD', 'ab cd ']
})
df

1. 문자열
str 사용해서 문자열 내의 값 변경 (ex. '데이터 분석'에서 '분석'만 바꾸고 싶을 때)
단, 숫자는 변경 불가. 문자만 가능.
df['A'] = df['A'].str.replace('분석', '시각화')
df
문자열 분리(컬럼 내에서 분리 자바의 split(" "))
df['A'].str.split()

첫번째 행 데이터만 선택
df['A'].str.split()[0]
각 행별 첫 번째 요소 추출
df['D'] = df['A'].str.split().str[0] # 행의 첫번째 요소 str[0]
df['D'] = df['A'].str.split().str[-1] # 행의 마지막 요소 str[-1]


문자 포함 여부 확인
df['시각화 포함 유무'] = df['A'].str.contains('시각화')
df

isin vs contains
- isin: 찾으려는 단어와 완벽히 같아야함
- contains: 찾으려는 단어가 포함되어있으면 됨
menu = pd.Series(['맛난버거 세트', '매운 치킨버거', '더블 치즈버거'])
menu.isin(['맛난버거 세트', '더블 치즈버거'])
menu.str.contains('세트')
문자길이
df['문자길이'] = df['A'].str.len()
대문자/소문자로 변경
df['C'] = df['C'].str.lower()
df['C'] = df['C'].str.upper()
공백제거
df['C'] = df['C'].str.replace(" ","")
'C' 컬럼의 데이터 'abcd'를 'bc'만 자르고 싶을 때(문자열 슬라이싱)
df['C'].str[1:3]
# str을 적지 않고 df['C'][1:3] 로 작성하면 1번 인덱스 ~ 2번 인덱스까지 데이터가 출력된다
2. 내장함수
행의 수
print(len(df))
print(df.shape[0]) # shape 사용하면 행과 열이 나오기 때문에 shape[0]
sum과 len을 활용해서 조건에 맞는 개수 구하기 (⭐️⭐️⭐️⭐️⭐️)
cond = df['가격'] > 5000 # 조건
#sum으로 조건에 맞는 개수 구하기
print(sum(cond))
#len으로 조건에 맞는 개수 구하기
print(len(df[cond]))
컬럼별 합계를 구할 때
df.sum(numeric_only=True)
df.sum(axis=0, numeric_only=True)

행 별 합계를 구할 때
df.sum(axis=1, numeric_only=True)

drop과 sum
| axis = 0 | axis = 1 | |
| drop() | 행 삭제 | 열 삭제 |
| sum() | 컬럼별 합계 | 행별 합계 |
drop()과 sum()은 반대 ! drop을 기준으로 외우자!
최대(max), 최소(min), 평균(mean), 중앙(median), 합계(sum), 표준편차(std), 분산(var)
# 최대, 최소, 평균, 중앙, 합계, 표준편차, 분산
print(df['가격'].max())
print(df['가격'].min())
print(df['가격'].mean())
print(df['가격'].median())
print(df['가격'].sum())
print(df['가격'].std())
print(df['가격'].var())
분위수 값(quantile)
print('분위수 25% 값',df['가격'].quantile(.25)) # 1사분위
print('분위수 75% 값',df['가격'].quantile(.75)) # 3사분위
# 하위 25% 데이터
cond = df['가격'].quantile(.25) > df['가격']
df[cond]
# 상위 25% 데이터
cond = df['가격'].quantile(.75) < df['가격']
df[cond]
최빈값(mode)은 여러개일 수 있기 때문에 시리즈 형식으로 반환. mode()[0] 해주면 0번째 인덱스 최빈값
df['원산지'].mode()[0]
최대값의 인덱스(idxmax())
df['가격'].idxmax()
df.loc[max_idx, '메뉴'] # 최대값의 인덱스의 메뉴만 출력
df.loc[max_idx]['메뉴']
가격 컬럼 중 가장 큰 값 N개(nlargest) / 가장 작은 값 N개(nsmallest)
df.nlargest(N, '가격')
df.nsmallest(N, '가격')
apply 적용해서 새로운 컬럼 생성(데이터프레임[컬럼명].apply(함수명))
def cal(x):
if x >= 100:
return "No"
else:
return "Yes"
df['먹어도 될까요'] = df['칼로리'].apply(cal)
df

import pandas as pd
df = pd.DataFrame({'Name': {0: '쿼카', 1: '알파카', 2: '시바견'},
'수학': {0: 90, 1: 93, 2: 85},
'영어': {0: 92, 1: 84, 2: 86},
'국어': {0: 91, 1: 94, 2: 83},})
df

위와 같은 데이터프레임이 있다고 가정했을 때,
melt를 사용해 컬럼을 -> 행으로 재구조화
pd.melt(df, id_vars=['Name'])

# melt - value 선택(수학과 영어)
pd.melt(df, id_vars=['Name'], value_vars=['수학', '영어'])

# melt 컬럼명 설정
pd.melt(df, id_vars=['Name'], var_name='과목', value_name='점수')

# melt 2개 기준
pd.melt(df, id_vars=['반', '이름'], var_name='과목', value_name='점수')

728x90
'Data > 빅데이터분석기사' 카테고리의 다른 글
| [빅데이터분석기사] 판다스6 - 시계열 데이터1 (0) | 2025.06.11 |
|---|---|
| [빅데이터분석기사] 판다스5 - 그룹핑, 병합, 피벗테이블 (1) | 2025.06.10 |
| [빅데이터분석기사] 판다스3 - 추가/변경, 정렬, 필터링, 결측치, 값 변경 (0) | 2025.06.09 |
| [빅데이터분석기사] 판다스2 - 자료형, 컬럼, 삭제, 인덱싱/슬라이싱 (0) | 2025.05.28 |
| [빅데이터분석기사] 판다스1 - 데이터프레임, 시리즈, 저장, EDA (0) | 2025.05.26 |