[Pandas] Series (CRUD)


Contents

  • Create
    • 1-1) List to Series
    • 1-2) Dict to Series
  • Read & Update
    • 2-1) Index์™€ Values
    • 2-2) ์›์†Œ ์„ ํƒ ๋ฐ ์ˆ˜์ •
  • Delete

๋ณธ ํฌ์ŠคํŒ…์€ Pandas์˜ Series์— ๊ด€ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.




pandas์˜ Series๊ฐ์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋œ 1์ฐจ์› ๋ฐฐ์—ด์˜ ํ˜•ํƒœ์ด๋‹ค.
  • index์™€ ๋ฐ์ดํ„ฐ value๊ฐ€ ์ผ๋Œ€์ผ๋กœ ๋Œ€์‘๋œ๋‹ค.
  • index๋Š” ๋ฐ์ดํ„ฐ value์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฃผ์†Œ์—ญํ• ์„ ํ•œ๋‹ค.

Series ๊ฐ์ฒด๋ฅผ CRUD(Create, Read, Update, Delete)์ˆœ์„œ๋กœ ์•Œ์•„๋ณด์ž.


Create

Series๊ฐ์ฒด๋Š” ๋”•์…”๋„ˆ๋ฆฌํ˜น์€ ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ ๋‹ค์Œ์˜ ํ•จ์ˆ˜ ์ธ์ž์— ์ „๋‹ฌํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

# Series์˜ ๋Œ€์†Œ๋ฌธ์ž์— ์œ ์˜ํ•˜์ž!
pandas.Series( [๋”•์…”๋„ˆ๋ฆฌ or ๋ฆฌ์ŠคํŠธ], index = [์ธ๋ฑ์Šค ๋ผ๋ฒจ ๋ฆฌ์ŠคํŠธ])  


1-1) Create : List to Series

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด๋ฅผ Series์˜ ํ•จ์ˆ˜ ์ธ์ž์— ๊ธฐ์ž…ํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ์—์„œ ์ขŒ์ธก์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ๋ณ„๋„์˜ index๊ฐ’์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค์— ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค(integer position)๊ฐ€ ์ž๋™์œผ๋กœ ์ง€์ •๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์šฐ์ธก์˜ ๊ฒฝ์šฐ ๊ฐ ์ธ๋ฑ์Šค์— ๋Œ€์‘๋˜๋Š” ๊ฐ’์ด๋‹ค. ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ 0๋ถ€ํ„ฐ ์ž๋™ ์ƒ์„ฑ๋œ๋‹ค.

์ด๋•Œ, ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ์ž๋ฃŒํ˜•(dtype)์€ ์ •์ˆ˜ํ˜•(int64)์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”๋ถˆ์–ด, type()ํ•จ์ˆ˜๋กœ list_to_sr์— ์ €์žฅ๋œ ๊ฐ์ฒด์˜ ์ž๋ฃŒํ˜•์„ ํ™•์ธํ•ด ๋ณด๋ฉด Series ํด๋ž˜์Šค์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

list_to_sr = pd.Series([1, 2, 3])
print(list_to_sr)
print(type(list_to_sr))
0    1
1    2
2    3
dtype: int64
<class 'pandas.core.series.Series'>


์œ„์™€ ๋‹ฌ๋ฆฌ ๋ณ„๋„์˜ index๋ฆฌ์ŠคํŠธ๋ฅผ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ง€์ •ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ์ธ๋ฑ์Šค ๋ผ๋ฒจ(index label)์ด ์ง€์ •๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

list_to_sr = pd.Series([1, 2, 3], index = ['A', 'B', 'C'])
print(list_to_sr)
print(type(list_to_sr))
A    1
B    2
C    3
dtype: int64
<class 'pandas.core.series.Series'>


1-2) Create : Dict to Series

pandas์˜ series ํ•จ์ˆ˜์—๋Š” ์‹œ๋ฆฌ์ฆˆ ๊ฐ์ฒด์™€ ๋น„์Šทํ•˜๊ฒŒ key์™€ value๋ฅผ ์‚ฌ์šฉํ•˜๋Š” dict๊ฐ์ฒด๋„ ๊ธฐ์ž…ํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

dict_to_sr = pd.Series({'A':1, 'B':2, 'C':3})
print(dict_to_sr)
print(type(dict_to_sr))
A    1
B    2
C    3
dtype: int64
<class 'pandas.core.series.Series'>


Read & Update

2-1) Index์™€ Values

Series๊ฐ์ฒด๋Š” ๋‹ค์Œ์˜ ์†์„ฑ๋“ค์„ ํ†ตํ•ด์„œ ์ธ๋ฑ์Šค๋ฐฐ์—ด๊ณผ ๋ฐ์ดํ„ฐ ๊ฐ’ ๋ฐฐ์—ด๋งŒ์„ ๋”ฐ๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • index : ์ธ๋ฑ์Šค ๋ฐฐ์—ด ์„ ํƒ
    • Series๊ฐ์ฒด์˜ ์ธ๋ฑ์Šค๊ฐ€ ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค์˜ ๊ฒฝ์šฐ,
      ์ธ๋ฑ์Šค ๋ฒ”์œ„์ธ RangeIndex ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ์ธ๋ฑ์Šค ๋ผ๋ฒจ์ด ์ง€์ •๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ์‹œ๋ฆฌ์ฆˆ์˜ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • values : ๋ฐ์ดํ„ฐ๊ฐ’ ๋ฐฐ์—ด ์„ ํƒ
  • *name : ์‹œ๋ฆฌ์ฆˆ์— ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.


์ด๋ฅผ ์ด์šฉํ•˜์—ฌ, ์œ„์—์„œ ์ƒ์„ฑ๋œ dict_to_sr๊ณผ list_to_sr์˜ ์ธ๋ฑ์Šค์™€ ๊ฐ’์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

# ๋ฆฌ์ŠคํŠธ
list_sr_index = list_to_sr.index
list_sr_value = list_to_sr.values
print('< ๋ฆฌ์ŠคํŠธ to ์‹œ๋ฆฌ์ฆˆ >')
print(f'index : {list_sr_index}', '\n', 
      f'type(index) : {type(list_sr_index)}', '\n',
      f'value : {list_sr_value }', '\n',
      f'type(value) : {type(list_sr_value)}')

print() # ๊ฐœํ–‰

# ๋”•์…”๋„ˆ๋ฆฌ
dict_sr_index = dict_to_sr.index
dict_sr_value = dict_to_sr.values
print('< ๋”•์…”๋„ˆ๋ฆฌ to ์‹œ๋ฆฌ์ฆˆ >')
print(f'index : {dict_sr_index }', '\n', 
      f'type(index) : {type(dict_sr_index)}', '\n',
      f'value : {dict_sr_value }', '\n',
      f'type(value) : {type(dict_sr_value)}')
< ๋ฆฌ์ŠคํŠธ to ์‹œ๋ฆฌ์ฆˆ >
index : RangeIndex(start=0, stop=3, step=1) 
type(index) : <class 'pandas.core.indexes.range.RangeIndex'> 
value : [1 2 3] 
type(value) : <class 'numpy.ndarray'>

< ๋”•์…”๋„ˆ๋ฆฌ to ์‹œ๋ฆฌ์ฆˆ >
index : Index(['A', 'B', 'C'], dtype='object') 
type(index) : <class 'pandas.core.indexes.base.Index'> 
value : [1 2 3] 
type(value) : <class 'numpy.ndarray'>


๋”๋ถˆ์–ด, index์†์„ฑ์„ ์ด์šฉํ•ด์„œ ์ธ๋ฑ์Šค ๋ผ๋ฒจ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์‹œ๋ฆฌ์ฆˆ value์˜ ๊ฒฝ์šฐ values์†์„ฑ์œผ๋กœ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋งŒ์•ฝ ์‹œ๋„ํ•  ๊ฒฝ์šฐ AttributeError๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

exam_sr = pd.Series({'A':1, 'B':2, 'C':3})
print(f'๊ธฐ๋ณธ : {exam_sr.index}')

exam_sr.index = ['๊ฐ€', '๋‚˜', '๋‹ค']
print(f'\n์ธ๋ฑ์Šค ๋ณ€๊ฒฝ : {exam_sr.index}')

# AttributeError๋ฐœ์ƒ
try:
    exam_sr.values = [100, 200, 300]
    print(f'\n๋ฐ์ดํ„ฐ ๊ฐ’ ๋ณ€๊ฒฝ : {exam_sr.values}')
except AttributeError as e:
		print('\n','AttributeError :', e)
๊ธฐ๋ณธ : Index(['A', 'B', 'C'], dtype='object')

์ธ๋ฑ์Šค ๋ณ€๊ฒฝ : Index(['๊ฐ€', '๋‚˜', '๋‹ค'], dtype='object')

AttributeError : can't set attribute


2-2) ์›์†Œ ์„ ํƒ ๋ฐ ์ˆ˜์ •

์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹œ๋ฆฌ์ฆˆ์˜ ์›์†Œ๋ฅผ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์›์†Œ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค๋กœ ์ง€์ •๋œ ์‹œ๋ฆฌ์ฆˆ์˜ ๊ฒฝ์šฐ ๋Œ€๊ด„ํ˜ธ[]์•ˆ์— ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์‹œ๋ฆฌ์ฆˆ์˜ ๊ฒฝ์šฐ ๋Œ€๊ด„ํ˜ธ[]์•ˆ์— ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋Œ€๊ด„ํ˜ธ[]์•ˆ์— ์ž…๋ ฅํ•˜๋ฉด ๊ฐ ์ธ๋ฑ์Šค์™€ ๋Œ€์‘๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์Šฌ๋ผ์ด์‹ฑํ•˜์—ฌ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ •์ˆ˜ํ˜• ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ ์Šฌ๋ผ์ด์‹ฑ๊ณผ ๋™์ผํ•˜๊ฒŒ [0: n]์œผ๋กœ ์Šฌ๋ผ์ด์‹ฑํ•  ๊ฒฝ์šฐ n-1๊นŒ์ง€๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ธ๋ฑ์Šค ๋ผ๋ฒจ์„ ์ด์šฉํ•˜์—ฌ [โ€˜Aโ€™:โ€™Dโ€™]์œผ๋กœ ์Šฌ๋ผ์ด์‹ฑํ•  ๊ฒฝ์šฐ โ€˜Dโ€™๊นŒ์ง€ ๋ฐ˜ํ™˜๋œ๋‹ค.

exam_sr = pd.Series({'A':1, 'B':2, 'C':3})

# ์ •์ˆ˜ํ˜• ์œ„์น˜ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ‰์ธ
a0 = exam_sr[0] # ํ•œ๊ฐœ์˜ ์›์†Œ
a1 = exam_sr[[0, 2]] # n๊ฐœ์˜ ์›์†Œ
a2 = exam_sr[0:2] # ์Šฌ๋ผ์ด์‹ฑ 

print(f'ํŠน์ • ์›์†Œ 1๊ฐœ ์„ ํƒ : \n{a0}\n')
print(f'ํŠน์ • ์›์†Œ n๊ฐœ ์„ ํƒ : \n{a1}\n')
print(f'์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์›์†Œ ์„ ํƒ : \n{a2}\n')
ํŠน์ • ์›์†Œ 1๊ฐœ ์„ ํƒ : 
1

ํŠน์ • ์›์†Œ n๊ฐœ ์„ ํƒ : 
A    1
B    2
dtype: int64

์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์›์†Œ ์„ ํƒ : 
A    1
B    2
dtype: int64


exam_sr = pd.Series({'A':1, 'B':2, 'C':3})

# ์ธ๋ฑ์Šค ๋ผ๋ฒจ์„ ์ด์šฉํ•˜์—ฌ ์ƒ‰์ธ
a0 = exam_sr['A'] # ํ•œ๊ฐœ์˜ ์›์†Œ
a1 = exam_sr[['A', 'B']] # n๊ฐœ์˜ ์›์†Œ
a2 = exam_sr['A':'B'] # ์Šฌ๋ผ์ด์‹ฑ 

print(f'ํŠน์ • ์›์†Œ 1๊ฐœ ์„ ํƒ : \n{a0}\n')
print(f'ํŠน์ • ์›์†Œ n๊ฐœ ์„ ํƒ : \n{a1}\n')
print(f'์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์›์†Œ ์„ ํƒ : \n{a2}\n')
ํŠน์ • ์›์†Œ 1๊ฐœ ์„ ํƒ : 
1

ํŠน์ • ์›์†Œ n๊ฐœ ์„ ํƒ : 
A    1
B    2
dtype: int64

์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์›์†Œ ์„ ํƒ : 
A    1
B    2
dtype: int64


๋”๋ถˆ์–ด, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ values ์†์„ฑ์ด ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์‹œ๋ฆฌ์ฆˆ์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

exam_sr = pd.Series({'A':1, 'B':2, 'C':3})
print(f'๊ธฐ๋ณธ : {exam_sr.values}')

exam_sr[0] = 100
print(f'ํ•œ ๊ฐœ์˜ ๊ฐ’๋งŒ ์ˆ˜์ • : {exam_sr.values}')

exam_sr[[0, 1]] = [10, 20]
print(f'n๊ฐœ์˜ ๊ฐ’๋งŒ ์ˆ˜์ • : {exam_sr.values}')

exam_sr[0:3] = [10, 20, 30]
print(f'n๊ฐœ์˜ ๊ฐ’๋งŒ ์ˆ˜์ • : {exam_sr.values}')
๊ธฐ๋ณธ : [10 20  3]
ํ•œ ๊ฐœ์˜ ๊ฐ’๋งŒ ์ˆ˜์ • : [100   2   3]
n๊ฐœ์˜ ๊ฐ’๋งŒ ์ˆ˜์ • : [10 20  3]
์Šฌ๋ผ์ด์‹ฑ์„ ์ด์šฉํ•œ ์ˆ˜์ • : [10 20 30]


Delete

์‹œ๋ฆฌ์ฆˆ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • del ๋ช…๋ น์–ด
    • ์ธ๋ฑ์Šค ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์‹œ๋ฆฌ์ฆˆ์ผ ๊ฒฝ์šฐ์—๋Š” series๊ฐ์ฒด[index ๋ฒˆํ˜ธ]์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
  • drop ๋ฉ”์†Œ๋“œ
    • inplace = True :๊ธฐ์กด ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    • inplace = False :์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. (Default)
    • ์ธ๋ฑ์Šค ๋ผ๋ฒจ์ด ์ง€์ •๋œ ์‹œ๋ฆฌ์ฆˆ์ผ ๊ฒฝ์šฐ์—๋Š” series๊ฐ์ฒด[index ๋ฒˆํ˜ธ]์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค
exam_sr = pd.Series({'A':1, 'B':2, 'C':3})
print(f'< ๊ธฐ๋ณธ >\n {exam_sr}\n')

sr1 = exam_sr.copy()
del sr1['A']
print(f'< del ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >\n {sr1}\n')

sr2 = exam_sr.copy()
sr2.drop('B', inplace = True)
print(f'< drop : ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >\n {sr2}\n')

sr3 = exam_sr.copy()
sr3.drop(['A', 'C'], inplace = True)
print(f'< drop : ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >\n {sr3}\n')
< ๊ธฐ๋ณธ >
A    1
B    2
C    3
dtype: int64

< del ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >
B    2
C    3
dtype: int64

< drop : ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >
A    1
C    3
dtype: int64

< drop : ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ >
B    2
dtype: int64





ยฉ 2022. by Yejin Ha

Powered by JihyunRyu