GIL's LAB

스트링 접근자: str accessor 본문

파이썬/데이터 분석을 위한 파이썬

스트링 접근자: str accessor

GIL~ 2022. 8. 22. 13:09

이번 포스팅에서는 판다스의 스트링 접근자에 대해 알아보겠습니다.

 

개요

스트링 접근자 .str은 판다스 시리즈의 속성으로 문자열을 처리하는데 사용할 수 있습니다.

이 접근자를 사용하면 문자열 처리를 하는데 필요한 내장 함수를 활용할 수 있습니다.

공식 문서에서 가져온 메서드 목록은 아래와 같습니다.

개인적으로는 아래 메서드 가운데 contains, count, endswith, replace, zfill을 많이 사용합니다. 

파이썬에서 문자열 관련 기본 문법이 친숙하다면 위에 소개된 메서드 이름도 친숙할 것입니다.

예를 들어, isnumeric  함수는 파이썬 내장 함수로 숫자로 구성된 문자열이면 True를, 숫자 외에 다른 것으로도 구성되있으면 False를 반환합니다. 간단한 사용 예시는 다음과 같습니다.

a = "12345"
b = "AA1234"

print(a.isnumeric())
print(b.isnumeric())

 [실행 결과]

True
False

위 결과에서 a는 숫자로만 구성된 문자열이고 b는 숫자 외에 다른 값도 포함되있는 문자열이기에, isnumeric을 사용했을 때 각각 True와 False가 반환됩니다.

 

시리즈의 각 요소에 대해 위 함수를 적용하려면 .str.isnumeric을 사용하면 됩니다.

먼저 a와 b로 구성된 시리즈 X를 만들어보겠습니다.

import pandas as pd
X = pd.Series([a, b])
X

[실행 결과]

0     12345
1    AA1234
dtype: object

다음으로 .str.isnumeric을 사용해보겠습니다.

X.str.isnumeric()

[실행 결과]

0     True
1    False
dtype: bool

각 요소에 대해 isnumeric이 잘 사용됐음을 알 수 있습니다.

 

 

주의 사항

자료형이 문자열인 시리즈에 대해서만 사용할 수 있으며, 그렇지 않으면 아래와 같은 오류가 발생합니다.

AttributeError: Can only use .str accessor with string values!

간단한 예를 들어보겠습니다.

1, 2, 3, 4로 구성된 시리즈를 만들고 str.isnumeric을 사용해보겠습니다.

Y = pd.Series([1,2,3,4])
Y.str.isnumeric()

[실행 결과]

AttributeError                            Traceback (most recent call last)
<ipython-input-7-3e77408c127c> in <module>
      1 Y = pd.Series([1,2,3,4])
----> 2 Y.str.isnumeric()

~\anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
   5459             or name in self._accessors
   5460         ):
-> 5461             return object.__getattribute__(self, name)
   5462         else:
   5463             if self._info_axis._can_hold_identifiers_and_holds_name(name):

~\anaconda3\lib\site-packages\pandas\core\accessor.py in __get__(self, obj, cls)
    178             # we're accessing the attribute of the class, i.e., Dataset.geo
    179             return self._accessor
--> 180         accessor_obj = self._accessor(obj)
    181         # Replace the property with the accessor object. Inspired by:
    182         # https://www.pydanny.com/cached-property.html

~\anaconda3\lib\site-packages\pandas\core\strings\accessor.py in __init__(self, data)
    152         from pandas.core.arrays.string_ import StringDtype
    153 
--> 154         self._inferred_dtype = self._validate(data)
    155         self._is_categorical = is_categorical_dtype(data.dtype)
    156         self._is_string = isinstance(data.dtype, StringDtype)

~\anaconda3\lib\site-packages\pandas\core\strings\accessor.py in _validate(data)
    215 
    216         if inferred_dtype not in allowed_types:
--> 217             raise AttributeError("Can only use .str accessor with string values!")
    218         return inferred_dtype
    219 

AttributeError: Can only use .str accessor with string values!

 

이 에러가 발생하지 않으려면 시리즈의 자료형이 문자열이어야 합니다.

자료형을 바꿀 수 있는 메서드로는 astype 메서드가 있습니다. 

위 예제에서 Y.astype(str)을 사용하여 Y의 자료형을 문자로 바꾸고 str.isnumeric을 사용해보겠습니다.

Y = pd.Series([1,2,3,4])
Y = Y.astype(str)
Y.str.isnumeric()

[실행 결과]

0    True
1    True
2    True
3    True
dtype: bool

 

Comments