반응형

이번에는 pandas에서 데이터를 삭제하는 방법에 대해 알아보고자 합니다.

1. pandas, numpy 라이브러리를 불러들입니다.

>>> import pandas as pd
>>> numpy as np

2. 다음 주소에서 데이터셋을 읽어들입니다.

>>> url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'

3. 읽어들인 데이터셋을 wine 변수에 저장합니다.

>>> wine = pd.read_csv(url)
>>> wine.head()

4. 컬럼들 중에서 첫번째, 네번째, 일곱번째, 아홉번째, 열두번째, 열세번째, 열네번째 컬럼을 삭제합니다.

>>> wine = wine.drop(wine.columns[[0, 3, 6, 8, 11, 12, 13]], axis=1) # drop 메서드를 사용해서, 컬럼을 삭제합니다. axis=1 인수로 열을 삭제한다는 것을 명시합니다.
>>> wine.head()

5. 아래와 같이 열을 지정합니다. 

1) alcohol 2) malic_acid 3) alcalinity_of_ash 4) magnesium 5) flavanoids 6) proanthocyanins 7) hue

>>> wine.columns = ['alcohol', 'malic_acid', 'alcalinity_of_ash', 'magnesium', 'flavanoids', 'proanthocyanins', 'hue']
>>> wine.head()

6. alcohol 컬럼 첫 3행의 값을 NaN으로 설정합니다.

>>> wine.iloc[0:3, 0] = np.nan # iloc 메서드로 첫번째 열(0)부터 세번째 열(2)에, 첫번째 컬럼(0)에 적용합니다. 0부터 시작입니다.

>>> wine.head()

7. magnesium 컬럼의 3, 4행 값을 NaN으로 설정합니다.

>>> wine.iloc[2:4, 3] = np.nan # iloc 메서드로 세번째 열(2)부터 네번째 열(3)에, 세번째 컬럼(3)에 적용합니다. 0부터 시작입니다. 

>>> wine.head()

8. alcohol 컬럼의 NaN 값을 10으로 채우고, magnesium 컬럼의 NaN은 100으로 채웁니다.

>>> wine.alcohol.fillna(10, inplace = True) # fillna 메서드로 NaN 값을 10으로 바꿉니다. inplace=True로 다른 객체를 만드는 게 아니라 기존 객체를 바꿉니다.
>>> wine.magnesium.fillna(100, inplace = True) 
>>> wine.head()

9. 결측 값의 숫자를 합산합니다.

>>> wine.isnull().sum() # 결측 값을 가진 데이터가 없습니다.

10. 10까지의 범위에서 랜덤으로 숫자 배열을 생성합니다.

>>> random = np.random.randint(10, size = 10)
>>> random

11. 생성한 난수를 인덱스로 사용하고 각 셀에 NaN 값을 할당합니다.

>>> wine.alcohol[random] = np.nan
>>> wine.head(10)

12. 얼마나 많은 결측 값이 있는지 확인합니다.

>>> wine.isnull().sum()

13. 결측 값을 가진 행들을 삭제합니다.

>>> wine = wine.dropna(axis=0, how = 'any') # dropna 메서드로 결측값을 찾습니다. axis=0으로 행을 선택하고, how='any'로 하나라도 결측값이 있는 경우를 포함합니다.
>>> wine.head()

14. 인덱스를 재설정합니다. 

>>> wine = wine.reset_index(drop = True)
>>> wine.head()

 

(Source : Pandas exercises 깃헙)

반응형
반응형

판다스(Pandas)의 기능 중 데이터셋으로 기본적인 통계작업을 하는 명령어들을 알아보도록 합니다.

1. pandas 및 datetime 라이브러리를 읽어들입니다. 

>>> import pandas as pd
>>> import datetime

2. data_url 변수에 다음 주소를 저장합니다.

>>> data_url = 'https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/06_Stats/Wind_Stats/wind.data'

3. pandas로 위 주소를 data 변수로 읽어들이되, 처음 3개 컬럼을 datetime 인덱스로 대체합니다.

>>> data = pd.read_table(data_url, sep = '\s+', parse_dates = [[0, 1, 2]]) # parse_dates 인수는 불린값 또는 숫자 리스트 또는 여러 컬럼들 값을 읽어들여서 날짜로 처리할 수 있습니다. 여기서는 맨 앞에 3개의 컬럼 값으로 날짜를 인식하도록 합니다.
>>> data.head() # 데이터셋의 구조를 알아보기 위해 상위 열 5개를 조회합니다.

4. 년도가 2061? 이 년도의 데이터가 실제로 있을까요? 이것을 수정해서 적용할 수 있는 함수를 만들어 봅시다.

>>> def fix_century(x):
               year = x.year - 100 if x.year > 1989 else x.year
               return datetime.date(year, x.month, x.day)      # 년도 데이터를 1900년대와 2000년대 구분을 위해 1989보다 많은 경우에는 1900년대으로 변경하도록 if문으로 간단한 함수를 만듭니다.
>>> data['Yr_Mo_Dy'] = data['Yr_Mo_Dy'].apply(fix_century) # apply 메서드를 사용해 'Yr_Mo_Dy'] 컬럼 전체에 함수를 적용합니다. 
>>> data.head() # 다시 데이터셋의 구조를 알아보기 위해 상위 열 5개를 조회합니다.

5. 날짜를 인덱스로 설정합니다. 이때 데이터 타입을 변경해서 적용해야 합니다. 데이터 타입은 datetime64[ns]여야 합니다.

>>> data['Yr_Mo_Dr'] = pd.to_datetime(data['Yr_Mo_Dy']) # 'Yr_Mo_Dy' 컬럼의 데이터 타입을 datetime64[ns]로 변경합니다.
>>> data = data.set_index('Yr_Mo_Dy') # set_index 메서드를 사용해 'Yr_Mo_Dy' 컬럼을 인덱스로 설정합니다.
>>> data.head()

6. 전체 데이터 값의 각 컬럼별 누락된 값을 알아봅니다. 

>>> data.isnull().sum() # 각 컬럼 값들 중에서 결측 값(Null)이 있는 곳의 갯수를 확인합니다.

7. 결측 값을 가진 데이터를 제외한 전체 데이터를 계산해 봅니다.

>>> data.shape[0] - data.isnull().sum()

또는

>>> data.notnull().sum()

8. 모든 위치와 전체 시간의 풍속에 대한 평균 값을 계산합니다.

>>> data.fillna(0).values.flatten().mean() # 결측값을 fillna(0)를 사용해 0으로 대체합니다. 그 후 dataframe을 list로 변경하는 flatten() 메서드를 사용한 후, 평균 값을 계산합니다.
>>> 10.223864592840483

9.  data의 각종 통계 수치를 한눈에 볼 수 있도록 표시해 봅니다.

>>> data.describe(percentiles=[])

10. day_stats라는 데이터 프레임을 만들고 모든 위치 및 전체 시간에 대한 풍속의 최소, 최대 및 평균 풍속 및 표준편차를 계산합니다.

>>> day_stats = pd.DataFrame()
>>> day_stats['min'] = data.min(axis = 1) # 최소값
>>> day_stats['max'] = data.max(axis = 1) # 최대값
>>> day_stats['mean'] = data.mean(axis = 1) # 평균
>>> day_stats['std'] = data.std(axis = 1) # 표준편차

11. 각 위치에 대한 1월의 평균 풍속을 찾아 봅니다.

>>> data.loc[data.index.month == 1].mean()

12. 연간 빈도로 각 위치별로 레코드를 다운 샘플링합니다.

>>> data.groupby(data.index.to_period('A')).mean()

13. 월간 빈도로 각 위치별로 레코드를 다운 샘플링합니다.

>>> data.groupby(data.index.to_period('M')).mean()

14. 주간 빈도로 각 위치별로 레코드를 다운 샘플링합니다.

>>> data.groupby(data.index.to_period('W')).mean()

15. 처음 52주 동안, 매주 모든 지역 풍속의 최소, 최대 및 평균 풍속 및 표준 편차를 계산합니다.

>>> weekly = data.resample('W').agg(['min', 'max', 'mean', 'std']) # 데이터를 'W(주)'에 재샘플링하고 agg 메서드를 사용해 최소, 최대, 평균, 표준편차 함수를 적용합니다.
>>> weekly.loc[weekly.index[1:53], 'RPT':'MAL'].head(10) # 처음 52주 동안의 값들 중 상위 10개 데이터 열을 보여줍니다.

(Source : Pandas exercises 깃헙)

반응형

+ Recent posts