pandas : 데이터 분석 라이브러리
행, 열 형태의 정형 데이터 객체를 다룸
2차원 데이터
엑셀 시트, RDB 의 테이블과 같은 형태
Series
pandas의 기본 객체중 하나
numpy의 ndarray를 기반으로 인덱싱 기능이 추가된 1차원 배열을 나타냄(index * value의 형태)
index를 지정하지 않을 시 기본적으로 ndarray와 같이 0-based인덱스 생성, 지정할 경우 명시적으로 지정된 index 사용
import pandas as pd
Series 생성
s1 =pd.Series([10,20,30])
0
0 10
1 20
2 30
# 왼쪽이 index, 오른쪽이 value(값), dtype : 데이터 타입
# 데이터로만 생성하게 되면, index는 0-base 인덱스로 생성됨
.values / .index / .dtype
s1.values
# array([10, 20, 30])
s1.index
# RangeIndex(start=0, stop=3, step=1)
s1.dtype
# dtype('int64')
# indexing
s1[0]
# np.int64(10)
data = , index= 명시하여 Series 생성
pd.Series(data=[1,2,3],index=[100,200,300])
"""
0
100 1
200 2
300 3
"""
# index 는 굳이 정수일 필요 없다!
s5 = pd.Series(data=[1, 2, 3], index=['john', 'mark', 'charlie'])
"""
0
john 1
mark 2
charlie 3
"""
# index 중복 허용된다!! (array 와는 다르다!)
s6 = pd.Series([1, 2, 3], ['john', 'john', 'charlie'])
"""
0
john 1
john 2
charlie 3
"""
# 중복 indexing 결과 Series!!
s6['john']
"""
0
john 1
john 2
"""
dict 로 생성
# dict 로 Series 생성
sdata = {'김철수': 35000, '이상현': 67000, '최종수': 12000, '박진관': 4000}
pd.Series(sdata)
# dict 의
# key -> index,
# value -> value,
"""
0
김철수 35000
이상현 67000
최종수 12000
박진관 4000
"""
Series ndim, shape, size, len, unique, count, value_counts 함수
size : 개수 반환
shape : 튜플형태로 shape 반환
unique : 유일한 값만 ndarray로 반환
count : NaN을 제외한 개수를 반환
mean : NaN을 제외한 평균
value_counts : NaN을 제외하고 각 값들의 빈도를 반환
nan 값의 연산
- 집계 연산의 경우 nan 값은 제외되어 연산된다 (numpy와 다른점)
- count, mean, max, min, ...
s1 = pd.Series([1, 1, 2, 1, 2, 2, 2, 1, 1, 3, 3, 4, 5, 5, 7, np.nan])
# value_counts() 고유한 값들의 개수
s1.value_counts()
count
1.0 5
2.0 4
3.0 2
5.0 2
4.0 1
7.0 1
Series 연산
index 기준으로 연산
numpy와 마찬가지로 Series 끼리 연산 가능
포인트 : 같은 인덱스 기준으로 연산한다
s1 = pd.Series([1, 2, 3, 4], ['a', 'b', 'c', 'd'])
s2 = pd.Series([6, 3, 2, 1], ['d', 'c', 'b', 'a']) # 인덱스 순서 다르다
s1 + s2
"""
0
a 2
b 4
c 6
d 10
"""
산술연산
Series의 경우헤도 스칼라와의 연산 각 원소별로 스칼라와의 연산이 적용
Series와의 연산은 각 인덱스에 맞는 값끼리 연산이 적용
이때 인덱스의 pair 가 맞지 않으면 결과는 NaN
s1 ** 2
"""
0
a 1
b 4
c 9
d 16
"""
s1 ** s2 # Series 는 동일 인덱스끼리 연산
"""
0
a 1
b 4
c 27
d 4096
"""
Boolean selection
boolean Series가 []와 함꼐 사용되면 True 값에 해당하는 값만 새로 반환되는 Series 객체에 포함됨
다중조건의 경우,&(and) ,|(or)를 사용하여 연결 가능
s = pd.Series(np.arange(10), np.arange(10) + 1)
s > 5 # 결과는 boolean Series
"""
0
1 False
2 False
3 False
4 False
5 False
6 False
7 True
8 True
9 True
10 True
"""
# 5보다 큰 value 들만 골라낸 Series
s[s > 5]
"""
0
7 6
8 7
9 8
10 9
"""
Series 값 삭제 : drop()
s = pd.Series(np.arange(100, 105), ['a', 'b', 'c', 'd', 'e'])
# 특정 index 삭제. 원본 변화 없다!
s.drop('e')
"""
0
a 200
b 101
c 102
d 103
"""
inplace = 원본변경
★중요★
drop() 함수는 drop 한 결과를 새로 만들어서 리턴 한거고
원본 데이터 s 는 변경하지 않는다
numpy, pandas 그 밖의 수많은 데이터 관련 모듈들에서의 대부분의 객체 함수들은 호출한 원본 객체를 변경하진 않고 원본의 사본을 만든뒤 사본에 연산 수행하여 그 사본을 리턴하도록 동작한다
하지만 inplace =True 파라미터를 주면 사본을 만들지 않고 원본을 변화시키도록 동작한다
s.drop('e', inplace=True) # 이 경우 리턴값 없다! None (원본 변화 발생!)
Multi lenel index
# multi-level index 를 가진 Series
s4 = pd.Series(
np.arange(100, 106),
index = [
['a', 'a', 'b', 'b', 'c', 'c'], # <- level 0 index
[ 1 , 2 , 1, 2 , 1, 2 ], # <- level 1 index
],
)
"""
0
a 1 100
2 101
b 1 102
2 103
c 1 104
2 105
"""
s4.index
"""
MultiIndex([('a', 1),
('a', 2),
('b', 1),
('b', 2),
('c', 1),
('c', 2)],
)
"""
# tuple 인덱싱으로 value 접근
s4['a',1]
# np.int64(100)
s4['a']
"""
0
1 100
2 101
"""
# ↑
# s4: 2-level index
# s4['a'] : 1-level index
xs()를 사용한 인덱스
cross-section
s4.xs('a') # level 0 인덱싱 <= s4['a'] 와 결과 동일
s4.xs(('a', 1)) # () 괄호 꼭 필요! # s4['a', 1] 과 동일
# s4.xs(2) # 에러, level 0 에서 2 라는 index? 없다!
s4.xs(2, level=1)
s4.xs(2, level=-1) # 마지막 레벨의 index에서 찾음
s4.xs((2, 'b'), level=(1, 0)) # 각각 지정
apply() 함수
Series 각 value 원소에 함수를 적용(apply) 할때 사용.
일종의 원소별(element-wise) 변환 역할
Series.apply(func, convert_dtype=True, args=(), **kwargs)
s = pd.Series([1, 2, 3, 4, 5])
# 각 원소에 제곱 적용
result = s.apply(lambda x: x ** 2)
print(result)
# 사용자 정의함수 적용
def custom_func(x):
return f"Value: {x}"
result = s.apply(custom_func)
print(result)
# 추가인자 전달
def multiply(x, factor):
return x * factor
# args의 10 값은 factor로 들어감
result = s.apply(multiply, args=(10,))
print(result)
# 문자열 처리
s2 = pd.Series([" apple ", "banana", " Cherry "])
# strip + 소문자 변환
result = s2.apply(lambda x: x.strip().lower())
print(result)'AI > 파이썬' 카테고리의 다른 글
| pandas - DataFrame column 선택하기 (0) | 2026.04.11 |
|---|---|
| pandas - DataFrame (0) | 2026.04.10 |
| numpy - Boolean Indexing (0) | 2026.04.08 |
| numpy - axis (차원축) (0) | 2026.04.07 |
| numpy - shape (차원) 변경하기 (0) | 2026.04.06 |