데이터분석 : 1. 데이터 생성 및 읽기
데이터분석 : 2. 인덱싱, 선택 및 할당
데이터분석 : 3. 요약 기능 및 맵
데이터분석 : 4. 그룹화 및 정렬
데이터분석 : 5. 데이터 유형 및 결측값
데이터분석 : 6. 이름 변경 및 결합
import pandas as pd
reviews = pd.read_csv("../input/wine-reviews/winemag-data-130k-v2.csv", index_col=0)
pd.set_option('display.max_rows', 5)
이전과 마찬가지로 Keggle데이터를 활용하여 실행하자.
- DataFrame 또는 Series의 열에 대한 데이터 유형은 dtype으로 알수있다.
reviews.price.dtype
dtype('float64')
reviews.dtypes
country object
description object
...
variety object
winery object
Length: 13, dtype: object
데이터 유형은 pandas가 데이터를 내부적으로 저장하는 방식에 대한 정보를 제공합니다.
float64는 64비트 부동 소수점 숫자를 사용한다는 것을 의미하며,
int64는 유사한 크기의 정수를 의미합니다.
그 외에도 다른 데이터 유형도 있습니다.
기억해야 할 하나의 특이한 점은 문자열로만 구성된 열은 자체 유형을 갖지 않고, 대신 object 유형을 갖습니다.
reviews.points.astype('float64')
0 87.0
1 87.0
...
129969 90.0
129970 90.0
Name: points, Length: 129971, dtype: float64
reviews.index.dtype
dtype('int64')
Pandas는 범주형 데이터와 시계열 데이터와 같은 더 특이한 데이터 유형도 지원한다.
그러나 이러한 데이터 유형은 덜 사용되므로 넘어가도록 하자.
reviews[pd.isnull(reviews.country)]
missing_price_reviews = reviews[reviews.price.isnull()]
n_missing_prices = len(missing_price_reviews)
or
n_missing_prices = reviews.price.isnull().sum()
or
n_missing_prices = pd.isnull(reviews.price).sum()
reviews.region_2.fillna("Unknown")
0 Unknown
1 Unknown
...
129969 Unknown
129970 Unknown
Name: region_2, Length: 129971, dtype: object
reviews_per_region = reviews.region_1.fillna('Unknown').value_counts().sort_values(ascending=False)
fillna() 함수를 사용하여 'region_1' 열의 결측값을 'Unknown'으로 대체한다.
value_counts() 함수를 사용하여 각 지역별로 리뷰 수를 계산한다.
(value_counts() 함수는 빈도수를 계산하여 시리즈로 반환하는 함수)
sort_values() 함수를 사용하여 리뷰 수를 기준으로 내림차순으로 정렬한다.
예를 들어, 이 데이터셋이 게시된 이후에 리뷰어 Kerin O'Keefe가 트위터 핸들을 @kerinokeefe에서 @kerino로 변경한 경우 데이터셋에 이를 반영하는 한 가지 방법은 replace() 메서드를 사용하는 것이다.
reviews.taster_twitter_handle.replace("@kerinokeefe", "@kerino")
0 @kerino
1 @vossroger
...
129969 @vossroger
129970 @vossroger
Name: taster_twitter_handle, Length: 129971, dtype: object