미식가의 개발 일기

[판다스] 시리즈(Series) 조작 본문

BigData

[판다스] 시리즈(Series) 조작

대체불가 핫걸 2024. 7. 12. 00:02

시리즈 생성

import pandas as pd

data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']

series = pd.Series(data, index=index, name='series')
series

 

인덱스 변경

new_index = ['o', 'p', 'q', 'r', 's']
series.index = new_index

 

인덱싱(indexing)

-> 슬라이싱도 가능

  • 대괄호
# 인덱스가 a인 데이터 추출
a = series['a']
# 3번째 인덱스의 값을 추출
b = series[2]

print(a) # 10
print(b) # 30
  • 라벨 기반
a = series.loc['a']
a # 10
  • 정수 기반
b = series.iloc[2]
b # 30

 

필터링(filtering)

  • 값이 30 이상인 값을 추출
filtered = series[series >= 30]
filtered
c    30
d    40
e    50
Name: my_series, dtype: int64

 

정렬(sort)

  •  값 기준 정렬
series_sorted = series.sort_values()
series_sorted
  • 인덱스 기준 정렬
series_sorted = series.sort_index()
# 내림차순 정렬은 ()안에 ascending=False 추가
series_sorted

 

순위(rank)

series_rank = series.rank(ascending=False)
series_rank
a    7.0
b    8.0
c    5.0
d    4.0
e    3.0
f    6.0
g    2.0
h    1.0
Name: my_series, dtype: float64

 

변환(apply)

시리즈 내의 각 요소에 함수를 적용한 결과를 새로운 시리즈로 반환, 데이터 프레임도 가능
import pandas as pd

data = [1, 2, 3, 4, 5]
series = pd.Series(data)
def f(x):
    if x % 2 == 0:
        result = 0
    else:
        result = 1
    return result

res = series.apply(f)
res
0    1
1    0
2    1
3    0
4    1
dtype: int64
  • Lambda 함수 버전
res = series.apply(lambda x: 0 if x % 2 == 0 else 1)
res

 

대체(replace)

data = ['minji', 'hojun', 'kobi', 'choco', 'icecream']
series = pd.Series(data)

# 'choco'를 'cake'로 대체
res = series.replace('choco', 'cake')
res
  • 한 번에 여러 개의 값을 대체할 때
replce = {'choco': 'cake', 'minji': 'mingd'}

res = series.replace(replace)
res
  • 정규 표현식 이용
# i로 시작하는 값을 koko로 변경
res = series.replace('^i', 'koko', regex=True)
res

 

나누기(cut)

data = [10, 20, 30, 40, 50]
series = pd.Series(data)

# 구간을 정의
bins = [0, 20, 40, 60]

# 라벨을 만들어줍니다.
labels = ['Low', 'Mid', 'High']

# cut 함수를 사용하여 값을 나누기
res = pd.cut(series, bins, labels=labels)
res
0     Low
1     Low
2     Mid
3     Mid
4    High
dtype: category
Categories (3, object): ['Low' < 'Mid' < 'High']

 

합치기(concat)

# axis=1 -> 수평으로 연결
pd.concat([series1, series2], axis=1)
 
반응형