- 데이터 로딩
- 필요하지 않은 컬럼 삭제 (STATION, STATION_NAME)
- DATE를 날짜 형식으로 수정 : 기존 DATE 컬럼의 타입 int -> str로 변경 후 날짜 형식으로 변경
- 날짜 컬럼을 인덱스로 변경
- 강수량('PRCP')이 많은 날 상위 10일 출력
- 1월 강수량만 출력
- 1년동안 강수량이 40미만으로 내린 날이 몇일인가?
- 1월에 내린 강수량의 합과 평균 강수량
- 2월에 내린 강수량의 합과 평균 강수량
import pandas as pd
import numpy as np
df = pd.read_csv('Seattle2014.csv')
df.shape
df.head()
df.tail()
df.sample()
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 365 entries, 0 to 364
Data columns (total 17 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 STATION 365 non-null object
1 STATION_NAME 365 non-null object
2 DATE 365 non-null int64
3 PRCP 365 non-null int64
4 SNWD 365 non-null int64
5 SNOW 365 non-null int64
6 TMAX 365 non-null int64
7 TMIN 365 non-null int64
8 AWND 365 non-null int64
9 WDF2 365 non-null int64
10 WDF5 365 non-null int64
11 WSF2 365 non-null int64
12 WSF5 365 non-null int64
13 WT01 365 non-null int64
14 WT05 365 non-null int64
15 WT02 365 non-null int64
16 WT03 365 non-null int64
dtypes: int64(15), object(2)
memory usage: 48.6+ KB
np.sum(df.isna()) # 결측치(True값) 개수
STATION 0
STATION_NAME 0
DATE 0
PRCP 0
SNWD 0
SNOW 0
TMAX 0
TMIN 0
AWND 0
WDF2 0
WDF5 0
WSF2 0
WSF5 0
WT01 0
WT05 0
WT02 0
WT03 0
dtype: int64
# 컬럼 삭제 (STATION, STATION_NAME)
df.drop(['STATION','STATION_NAME'], axis=1, inplace=True)
df
# (1) DATE를 날짜 형식으로 수정 (format 지정)
df2 = df.copy()
df2['DATE'] = pd.to_datetime(df2['DATE'], format='%Y%m%d')
# (2) DATE를 날짜 형식으로 수정 : 기존 DATE 컬럼의 타입 int -> str로 변경 후 날짜 형식으로 변경
df['DATE'] = df['DATE'].astype('str')
df['DATE'] = pd.to_datetime(df['DATE'])
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 365 entries, 0 to 364
Data columns (total 15 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 DATE 365 non-null datetime64[ns]
1 PRCP 365 non-null int64
2 SNWD 365 non-null int64
3 SNOW 365 non-null int64
4 TMAX 365 non-null int64
5 TMIN 365 non-null int64
6 AWND 365 non-null int64
7 WDF2 365 non-null int64
8 WDF5 365 non-null int64
9 WSF2 365 non-null int64
10 WSF5 365 non-null int64
11 WT01 365 non-null int64
12 WT05 365 non-null int64
13 WT02 365 non-null int64
14 WT03 365 non-null int64
dtypes: datetime64[ns](1), int64(14)
memory usage: 42.9 KB
# 날짜 컬럼을 인덱스로 변경
df.set_index('DATE', inplace=True)
df.head()
# 강수량('PRCP')이 많은 날 상위 10일 출력
# 강수량을 기준으로 내림차순 후 상위 10개만 출력
df.sort_values(by='PRCP', ascending=False)[['PRCP']].head(10)
# 1월 강수량만 출력
df[['PRCP']][df.index.month == 1]
# 1년동안 강수량이 40미만으로 내린 날이 몇일인가? (277일)
len(df[df['PRCP'] < 40])
np.sum(df['PRCP'] < 40)
df[df['PRCP'] < 40].shape[0]
# not null 포함하지 않는 개수
df[df['PRCP'] < 40]['PRCP'].count()
# 1월에 내린 강수량의 합과 평균 강수량 (반올림, 소수점 이하 2자리까지)
df['PRCP'][df.index.month == 1].agg(['sum', 'mean']).apply(lambda x: np.round(x, 2))
sum 940.00
mean 30.32
Name: PRCP, dtype: float64
# 2월에 내린 강수량의 합과 평균 강수량
df['PRCP'][df.index.month == 2].agg(['sum','mean']).apply(lambda x:np.round(x, 2))
sum 1552.00
mean 55.43
Name: PRCP, dtype: float64
'데이터 분석 > 판다스' 카테고리의 다른 글
[Pandas] 품목별 수출입실적 분석 (0) | 2023.11.14 |
---|---|
[Pandas] 국가별 알콜 섭취량 데이터 분석 (0) | 2023.11.13 |
[Pandas] DataFrame 합치기 (0) | 2023.11.13 |
[Pandas] 함수 매핑 (0) | 2023.11.13 |
[Pandas] 시계열 데이터 (0) | 2023.11.10 |