본문 바로가기

Pandas/전처리

(22)
판다스 - 특잇값(outlier) 처리하기 데이터프레임을 다루다보면 여러 아웃라이어들을 볼 수 있다. 이 값들은 가치가 있을 수 있지만 때로는 제외하고 처리해야할 때가 많다. 데이터 불러오기 data = pd.DataFrame(np.random.randn(1000, 4)) 요약본을 살펴보자 각 컬럼별 평균값은 굉장히 작은데 최솟값과 최대값의 절대값이 3이 넘는 데이터가 있다. 이를 보통 특잇값이라고 부르며 적절한 값으로 대체할 필요가 있다. 처리전, 특잇값이 있는 행 살펴보기 절댓값이 3을 초과하는 값이 들어있는 모든 로우를 살펴보자 이때 쓰는 것이 any 메서드이다. 한 행에 절댓값이 3이 넘는 데이터가 하나라도 있다면 True를 반환한다. 0번, 2번행에 3이 넘는 데이터가 있다는 뜻이다. True는 1이니 이를 더하면 총 6개의 행에 아웃라..
판다스 - 넓은 데이터 정리하기 : melt 데이터 불러오기 퓨 리서치센터에서 조사한, 미국의 소득과 종교 종교별 소득에 대한 설문 데이터이다. 컬럼은
판다스 - isin() 데이터 불러오기 sibsp의 값이 3 또는 4 또는 5인 행만 보고 싶다면 방법1. 3개의 불린 리스트를 이용한다. 1. 불린 리스트(mask변수)를 총 3개를 만든다. 2. 이를 데이터프레임 필터 조건으로 넣되, | 를 이용하여 또는으로 활용한다. 방법2. isin 메서드를 사용한다. sibsp가 3또는 4또는 5일때만 True 반환 이 리스트를 이용하여 필터링한다. 방법 1과 동일한 결과가 나왔다.
판다스 - 컬럼(열) 분리, 컬럼(열) 추가 : str.split, str.get 데이터 불러오기 연월일 컬럼을 연 / 월 / 일 세개의 컬럼으로 나눠서 보고 싶다면 방법1 : str.split() 1. 연월일 컬럼의 자료형을 object로 변환한다. 2. 판다스의 자료형과 파이썬의 문자열을 이용해 .str.split('-') 문법을 사용한다. 3. 그렇게 분할된 리스트를 시리즈로 받아낸다. 4. 그 시리즈를 .str.get()을 이용한다. 5. 0번째는 연 / 1번째는 월 / 2번째는 일 6. 이들을 새 컬럼으로 추가한다. * 주의 : 연월일, 연, 월, 일 컬럼은 object형이므로 추후 활용을 위해선 정수형으로 바꿀 필요가 있다. 방법2 : str.split(expand=True) - 사실 방법1과 유사하나 코드가 다소 간결해지는 것 뿐이다. 1. split에서 expand=Tr..
판다스 - 컬럼 순서 변경 데이터 불러오기 df.columns 데이터프레임의 컬럼을 리스트로 가져올 수 있다. df.columns.values 또한 마찬가지로 데이터프레임의 컬럼을 가져올 수 있다. sorted(리스트)를 이용해 리스트 안의 원소들을 알파벳 순으로 정렬한다. 그 정렬한 리스트를 이용해 컬럼의 순서를 바꾼 데이터프레임을 만들어 낸다. reversed reversed를 이용해 기존의 리스트 배열을 역순으로 바꾼다. 그 역순 리스트를 이용해 데이터프레임의 열의 순서를 바꾼다. 내 마음대로 바꾸기 내가 원하는 순서로 리스트를 만들고 그 리스트를 이용해 새로운 순서의 데이터프레임을 만든다.
판다스 - 데이터 정규화 데이터 불러오기 숫자 데이터의 상대적인 크기 차이를 제거할 필요가 있다. 마력과 무게의 절대값의 차가 매우 크기 때문에 (0번행의 마력 : 130, 무게 : 3504) 상대적으로 큰 숫자 값을 갖는, 무게 컬럼(변수)의 영향이 더 클 수 있다. [목적 : horsepower 컬럼 정규화] 방법1 : 해당 열의 최댓값으로 나누기 horsepower_normalization 컬럼의 값은 0부터 1까지 값을 가지게 된다. horsepower 컬럼의 최댓값은 230 0번행은 130이므로 130 / 230을 하면 0.565217이 나온다. 방법2 : 최댓값과 최솟값 이용 분자 = 값 - 최솟값 분모 = 최댓값 - 최솟값 예제의 horsepower 열의 최댓값은 230, 최솟값은 46이다. 최댓값과 최솟값의 차는 ..
판다스 - 구간 분할 : pd.cut, pd.get_dummies 데이터 불러오기 horsepower를 3구간으로 저출력 / 보통출력 / 고출력 나누고자 한다. 이때 pd.cut을 이용하는데 (데이터배열, 구간, 레이블이름, 경계 포함) 중 데이터배열과 구간은 필수 입력이다. include_lowest는 첫 경계값을 포함하는지에 대한 여부이다. 각각의 출력 빈도를 볼 수 있다. 더미 변수 - get_dummies 뒤에서 나올 원핫인코딩을 위해 get_dummies를 이용한다. 0은 False, 1은 True를 의미하며 각 행은 하나의 1값 / 2개의 0값을 가질 수 있다. 원래 0번째 행은 보통출력이었으므로 저출력과 고출력은 0, 보통출력은 1을 가진다. 이를 기존 데이터프레임의 컬럼으로 추가할 수 있다.
판다스 - 자료형 변환 : astype, pd.to_numeric 데이터 불러오기 문제가 있는 열은 total_bill로서, [1, 3, 5, 7]행은 missing이라는 문자열이 들어가 있다. 데이터 타입을 확인해도 숫자가 아닌 object형으로 되어있다. [목적 : total_bill 컬럼을 float형으로 바꾸기] astype(), pd.to_numeric() missing이라는 문자열이 있기 때문에 두 방법 모두 오류 발생 방법1 : replace 이용 missing을 NaN으로 바꾼 뒤 astype 실행 total_bill_replaced 컬럼이 float형으로 바뀐 것을 확인 방법2. pd.to_numeric(errors='coerce') 이용 coerce의 뜻 억압하다, 강요하다와 같이 문자열을 강제로 NaN으로 바꾸면서 동시에 float형으로 만들었다. ..