Coding Diary.

(파이썬) 판다스(Pandas) 시리즈 만들기, .loc/.iloc 이용해서 요소들에 액세스하고 삭제하기 본문

Coding/Python

(파이썬) 판다스(Pandas) 시리즈 만들기, .loc/.iloc 이용해서 요소들에 액세스하고 삭제하기

life-of-nomad 2024. 6. 18. 11:39
728x90
반응형
지난 글에서 넘파이(NumPy)에 대해 알아보았습니다. 이번 글에서는 판다스(Pandas)의 시리즈 만드는 방법, 요소에 액세스하고 삭제하는 방법에 대해 알아보겠습니다.

 

🔻(참고)넘파이🔻

 

(파이썬) NumPy 부울 값 인덱싱, 집합 연산, np.sort() 정렬

이전 글에서 NumPy의 슬라이싱을 이용하여 요소들을 선택하는 방법을 알아보았습니다. 선택하려는 요소의 정확한 인덱스를 알고 있을 때는 그 방법이 유용하지만, 선택하려는 요소의 인덱스를

life-of-nomad.tistory.com

 

1.  NumPy ndarray와 Pandas Series 의 차이점

  • 둘의 가장 큰 차이점은 판다스 시리즈는 각각의 요소에 인덱스 레이블을 지정할 수 있다는 점입니다. 즉, 판다스 시리즈의 인덱스에 원하는 대로 이름을 정할 수 있습니다.
  • 또 다른 차이점은 판다스에는 다양한 데이터 유형을 담을 수 있다는 점입니다.

2. Pandas Series

  • Pandas Series는 array(배열)과 비슷한 1차원 객체로써 숫자나 문자열 같은 다양한 데이터 유형을 담을 수 있고 축 레이블을 제공할 수도 있습니다.

1) Pandas Series 만들기

  • 먼저 판다스를 파이썬에 import 해보겠습니다. 보통 pandas는 pd로써 임포트합니다.
import pandas as pd
  • 판다스 시리즈는 pd.Series(data, index)라는 명령을 써서 만들 수 있습니다.
  • 여기서 index는 레이블로 된 리스트입니다. 
  • 예를 들어, 판다스 시리즈를 사용하여 식료품 목록을 저장해보겠습니다. 
  • 식품 이름을 인덱스 레이블로 사용하고 구매해야 하는 각각의 식품의 수량을 데이터로 사용합니다.
groceries = pd.Series(data = [30, 6, 'Yes', 'No'], index = [''eggs', 'apples', 'milk', 'bread'])
groceries

  • 이런 식으로 판다스 시리즈에서는 첫 번째 열에 인덱스가 표시되고 두 번째 열에는 데이터가 표시됩니다. 
  • 데이터의 인덱스가 0부터 3이 아니라 우리가 넣은 식품들 입니다.
  • 또한, 판다스 시리지의 데이터에는 정수와 문자열이 모두 있습니다.

2) 속성 shape, ndim, size 출력하기

print('Groceries has shape:', groceries.shape)
print('Groceries has dimension:', groceries.ndim)
print('Groceries has a total of', groceries.size, 'elements')

>>> Groceries has shape: (4,)
    Groceries has dimension: 1
    Groceries has a total of 4 elements

3) 속성 values, index 출력하기

print('The data in Groceries is:', groceries.values)
print('The index of Groceries is:', groceries.index)

>>> The data in Groceries is: [30 6 'Yes' 'No'] 
	The index of Groceries is: Index(['eggs', 'apples', 'milk', 'bread'], dtype='object')

3) 주어진 Series에 어떤 인덱스가 있는지 확인하기

x = 'bananas' in groceries
y = 'bread' in groceries

print('Is bananas an index label in Groceries:', x)
print('Is bread an index label in Groceries:', y)

>>> Is bananas an index label in Groceries: False 
    Is bread an index label in Groceries: True

 

3. Pandas Series의 요소들에 액세스하고 삭제하기

1) 인덱스 레이블로 요소에 액세스하기

  • Pandas Series를 사용하면 다양한 방식으로 데이터에 액세스할 수 있다는 장점이 있습니다.
  • NumPy ndarray에서 요소에 액세스한 방법과 비슷하게 대괄호 [] 안에숫자 인덱스를 넣거나 인덱스 레이블을 사용하여 요소에 액세스할 수 있습니다. 
  • 숫자 인덱스를 사용할 수 있기 때문에 양수와 음수 정수를 사용하여 각각 Series의 시작 부분이나 끝부분에서 데이터에 액세스할 수 있습니다.
  • 다양한 방식으로 요소에 액세스할 수 있기 때문에 우리가 인덱스 레이블을 참조하는지, 혹은 숫자 인덱스를 참조하는지 모호성을 없애기 위해 Pandas Series 에는 우리가 원하는 것을 명시적으로 기술하도록 해주는 .loc와 .iloc라는 속성이 있습니다.
  • 속성 .loc location(위치)를 나타내고, 우리가 레이블이 지정된 인덱스를 사용한다는 사실을 명시적으로 설명할 때 사용합니다.
  • 그와 유사하게 속성 .iloc intenger location(정수 위치)를 나타내며 우리가 숫자 인덱스를 사용한다는 사실을 명시적으로 설명할 때 사용합니다.
print(groceries['eggs'])
>>> 30

print(groceries[['milk', 'bread']])
>>> milk  Yes
    bread  No
    dtype: object
    
print(groceries[[0, 1]])
>>> eggs  30
    apples  6
    dtype: object
    
print(groceries[[-1]])
>>> bread  No
    dtype: object
    
print(groceries[0])
>>> 30

print(groceries.iloc[[2, 3]])
>>> milk  Yes
    bread  No
    dtype: object

2) 인덱스 레이블을 사용하여 요소 변경하기

  • Pandas Series도 NumPy ndarray 처럼 mutable(변형가능한)합니다. 즉, Pandas Series를 만든 다음에 요소를 변경할 수 있습니다.
  • 예를 들어, 우리가 사야 할 eggs의 개수를 식료품 목록에서 변경해보겠습니다.
groceries['eggs'] = 2
print(groceries)
>>> eggs        2
    apples      6
    milk      Yes
    bread      No
    dtype: object

3) drop()을 사용하여 사본에서 요소 삭제하기

  • .drop() 메소드를 사용하면 판다스 시리즈에서 항목을 삭제할 수 있습니다.
  • Series.drop(label) 메소드를 쓰면 주어진 Series에서 주어진 label이 삭제됩니다.
  • 여기서 Series.drop(label)메소드를 쓰면 Series의 사본에서 요소가 삭제된다는 점에 주의해야 합니다.
  • 즉, Sereis 원본은 변경되지 않습니다.
# We display the original grocery list
print(groceries)
>>> eggs        2
    apples      6
    milk      Yes
    bread      No
    dtype: object

# We remove apples from our grocery list. The drop function removes elements out of place
print(groceries.drop('apples'))
>>> eggs       2
    milk     Yes
    bread     No
    dtype: object

# When we remove elements out of place the original Series remains intact.
# we display our grocery list again
print(groceries)
>>> eggs        2
    apples      6
    milk      Yes
    bread      No
    dtype: object

4) drop()을 사용하여 원본 요소 삭제하기

  • .drop() 메소드에서 키워드 inplace=True 로 설정하여 Pandas Series 원본에서 항목을 삭제할 수도 있습니다.
# We display the original grocery list
print(groceries)
>>> eggs        2
    apples      6
    milk      Yes
    bread      No
    dtype: object

# We remove apples from our grocery list in place by setting the inplace keyword to True
groceries.drop('apples', inplace = True)

# When we remove elements in place the original Series its modified.
# we display our grocery list again
print(groceries)
>>> eggs       2
    milk     Yes
    bread     No
    dtype: object
728x90
반응형