본 내용을 보기 전에 Python 사전 준비 및 Python 완전 기초를 먼저 이해하셔야 합니다.
본 포스팅은 pandas 공식 홈페이지를 기반으로 작성하였습니다.
이번 포스팅에서는 titanic 승객 데이터를 활용하겠습니다.
import pandas as pd
titanic = pd.read_csv("D:/python_exer/titanic.csv")
titanic.head()
1. 텍스트 데이터 다루기
1.1. 모든 이름 문자를 소문자로 변경하기
titanic["Name"].str.lower()
이름 열의 각 문자열을 소문자로 만들려면 이름 열을 선택하고, str 접근자를 추가하여 lower 메서드를 적용합니다. 따라서 각 문자열은 요소별로 변환됩니다. str 접근자를 사용할 때 여러 특수 문자열 메서드를 사용할 수 있습니다. 이러한 메서드는 일반적으로 단일 요소에 대해 동등한 기본 제공 문자열 메서드와 일치하는 이름을 갖지만 열의 각 값에 대해 요소별로 적용됩니다.
1.2. 쉼표 앞의 부분을 추출하여 승객의 성을 포함하는 새 column 생성하기
titanic["Name"].str.split(",")
Series.str.split() 메서드를 사용하면 각 값이 2개의 요소 목록으로 반환됩니다. 첫 번째 요소는 쉼표 앞의 부분이고 두 번째 요소는 쉼표 뒤의 부분입니다.
titanic["Surname"] = titanic["Name"].str.split(",").str.get(0)
titanic["Surname"]
성을 나타내는 첫 번째 부분(요소 0)에만 관심이 있으므로 str 접근자를 다시 사용하고 Series.str.get()을 적용하여 관련 부분을 추출할 수 있습니다. 실제로 이러한 문자열 함수를 연결하여 한 번에 여러 함수를 결합할 수 있습니다.
1.3. 타이타닉호에 탑승한 백작부인에 대한 승객 데이터 추출하기
titanic["Name"].str.contains("Countess")
titanic[titanic["Name"].str.contains("Countess")]
문자열 메서드 Series.str.contains()는 문자열에 Countess라는 단어가 포함되어 있으면 Name 열의 각 값을 확인하고 각 값에 대해 True(Countess는 이름의 일부임) 또는 False(Countess는 일부가 아님)를 반환합니다. 조건부(부울) 인덱싱을 사용하여 데이터를 하위 선택하는 데 사용할 수 있습니다. 타이타닉에는 백작부인이 한 명뿐이었으므로 결과적으로 하나의 행을 얻습니다(Note: Series.str.contains() 및 Series.str.extract() 메서드가 정규식을 허용하지만 이번 포스팅에서는 다루지 않겠습니다.).
1.4. 타이타닉의 승객 중 가장 긴 이름을 가진 승객 추출하기
titanic["Name"].str.len()
가장 긴 이름을 얻으려면 먼저 이름 열에 있는 각 이름의 길이를 가져와야 합니다. pandas 문자열 메서드를 사용하여 Series.str.len() 함수가 각 이름에 개별적으로(요소별로) 적용됩니다.
titanic["Name"].str.len().idxmax()
다음으로 이름 길이가 가장 긴 테이블에서 해당 위치, 정확하게는 인덱스 레이블을 가져와야 합니다. idxmax() 메서드는 정확히 그 작업을 수행합니다. 문자열 방식이 아니며 정수에 적용되므로 str을 사용하지 않습니다.
titanic.loc[titanic["Name"].str.len().idxmax(), "Name"]
행(307)과 열(이름)의 인덱스 이름을 기반으로 부분 집합을 생성하기 위해 loc 연산자를 사용하였습니다.
1.5. "Sex" 열에서 "male" 값을 "M"으로, "female" 값을 "F"로 교체
titanic["Sex_short"] = titanic["Sex"].replace({"male": "M", "female": "F"})
replace()는 문자열 메서드가 아니지만 매핑이나 어휘를 사용하여 특정 값을 변환하는 편리한 방법을 제공합니다. {from : to} 매핑을 정의는 딕셔너리 행태를 필요로 합니다.
(Warning: 특정 문자 집합을 대체하는 데 사용할 수 있는 replace() 메서드도 있습니다. 그러나 여러 값을 매핑하는 경우 다음과 같이 됩니다.)
titanic["Sex_short"] = titanic["Sex"].str.replace("female", "F")
titanic["Sex_short"] = titanic["Sex_short"].str.replace("male", "M")
이것은 번거롭고 쉽게 실수로 이어질 것입니다. 이 두 문장을 반대 순서로 적용하면 어떻게 될지 생각해 보세요.
2. Remeber!
- 문자열 메서드는 str 접근자를 사용하여 사용할 수 있습니다.
- 문자열 메서드는 요소별로 작동하며 조건부 인덱싱에 사용할 수 있습니다.
- replace 방법은 주어진 딕셔너리에 따라 값을 변환하는 편리한 방법입니다.
'Python > Pandas' 카테고리의 다른 글
Pandas 데이터 보기(Viewing) (0) | 2021.09.13 |
---|---|
Pandas 객체 생성 (0) | 2021.09.12 |
Pandas 시계열 데이터 다루기 (0) | 2021.08.20 |
Pandas 활용 테이블 결합 방법 (0) | 2021.08.19 |
Pandas 테이블 구조 변경 방법 (0) | 2021.08.18 |
댓글