๋ฐ์ํ
โ Data Load
# Data Load / Data type ํ์
df = pd.read_csv(DataUrl)
Ans = df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6574 entries, 0 to 6573
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Yr_Mo_Dy 6574 non-null object
1 RPT 6568 non-null float64
2 VAL 6571 non-null float64
3 ROS 6572 non-null float64
4 KIL 6569 non-null float64
5 SHA 6572 non-null float64
6 BIR 6574 non-null float64
7 DUB 6571 non-null float64
8 CLA 6572 non-null float64
9 MUL 6571 non-null float64
10 CLO 6573 non-null float64
11 BEL 6574 non-null float64
12 MAL 6570 non-null float64
dtypes: float64(12), object(1)
memory usage: 667.8+ KB
โ Datetime type ๋ณ๊ฒฝ
# Yr_Mo_Dy์ ํ๋ค์ค์์ ์ธ์ํ ์ ์๋ datetime64ํ์
์ผ๋ก ๋ณ๊ฒฝ
df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy)
Ans = df.Yr_Mo_Dy
Ans.head(4)
0 2061-01-01
1 2061-01-02
2 2061-01-03
3 2061-01-04
Name: Yr_Mo_Dy, dtype: datetime64[ns]
โ year ์ unique ๊ฐ ์ถ๋ ฅ
# Yr_Mo_Dy์ ์กด์ฌํ๋ ๋
๋์ ์ ์ผ๊ฐ์ ๋ชจ๋ ์ถ๋ ฅ
Ans = df.Yr_Mo_Dy.dt.year.unique()
Ans
array([2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 1971,
1972, 1973, 1974, 1975, 1976, 1977, 1978])
โ year ์ unique ๊ฐ ์ถ๋ ฅ
# Yr_Mo_Dy์ ๋
๋๊ฐ 2061๋
์ด์์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์๋ชป๋ ๋ฐ์ดํฐ
# ํด๋น๊ฒฝ์ฐ์ ๊ฐ์ 100์ ๋นผ์ ์๋กญ๊ฒ ๋ ์ง๋ฅผ Yr_Mo_Dy ์ปฌ๋ผ์ ์ ์
import datetime
def fix_century(x):
year = x.year - 100 if x.year >= 2061 else x.year
return pd.to_datetime(datetime.date(year, x.month, x.day))
df['Yr_Mo_Dy'] = df['Yr_Mo_Dy'].apply(fix_century)
Ans = df.tail(4)
Ans
โ ๋ ๋๋ณ ๊ฐ ์ปฌ๋ผ์ ํ๊ท ๊ฐ
Ans = df.groupby(df.Yr_Mo_Dy.dt.year).mean()
Ans.head(4)
โ ์์ผ๋ณ Mapping
# weekday์ปฌ๋ผ์ ๋ง๋ค๊ณ ์์ผ๋ณ๋ก ๋งคํํ๋ผ (์์์ผ: 0 ~ ์ผ์์ผ :6)
df['weekday'] = df.Yr_Mo_Dy.dt.weekday
Ans = df['weekday'].to_frame()
Ans
โ ๋ ๋๋ณ ๊ฐ ์ปฌ๋ผ์ ํ๊ท ๊ฐ
# ๋
๋, ์ผ์ ์๊ด์์ด ๋ชจ๋ ์ปฌ๋ผ์ ๊ฐ ๋ฌ์ ํ๊ท ๊ตฌํ๊ธฐ
Ans = df.groupby(df.Yr_Mo_Dy.dt.month).mean()
Ans.head(4)
โ ๊ฒฐ์ธก์น ๊ฐ ๋์ฒดํ๊ธฐ
# ๋ชจ๋ ๊ฒฐ์ธก์น๋ ์ปฌ๋ผ๊ธฐ์ค ์ง์ ์ ๊ฐ์ผ๋ก ๋์ฒดํ๊ณ ์ฒซ ๋ฒ์งธ ํ์ ๊ฒฐ์ธก์น๊ฐ ์์๊ฒฝ์ฐ ๋ค์ ์๋ ๊ฐ์ผ๋ก ๋์ฒด
df = df.fillna(method='ffill').fillna(method='bfill')
df.isnull().sum()
Yr_Mo_Dy 0
RPT 0
VAL 0
ROS 0
KIL 0
SHA 0
BIR 0
DUB 0
CLA 0
MUL 0
CLO 0
BEL 0
MAL 0
weekday 0
dtype: int64
โ ์ปฌ๋ผ์ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
# ๋
๋ - ์์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ์ปฌ๋ผ์ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
Ans = df.groupby(df.Yr_Mo_Dy.dt.to_period('M')).mean()
Ans.head(3)
โ ์ปฌ๋ผ๊ฐ ์ฐจ๋ถํ๊ธฐ
# RPT ์ปฌ๋ผ์ ๊ฐ์ ์ผ์๋ณ ๊ธฐ์ค์ผ๋ก 1์ฐจ์ฐจ๋ถํ๊ธฐ
Ans = df['RPT'].diff()
Ans
0 NaN
1 -0.33
2 3.79
3 -7.92
4 2.75
...
6569 3.75
6570 -4.37
6571 0.79
6572 4.50
6573 1.83
Name: RPT, Length: 6574, dtype: float64
โ ์ด๋ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
# RPT์ VAL์ ์ปฌ๋ผ์ ์ผ์ฃผ์ผ ๊ฐ๊ฒฉ์ผ๋ก ๊ฐ๊ฐ ์ด๋ํ๊ท ํ ๊ฐ ๊ตฌํ๊ธฐ
Ans = df[['RPT','VAL']].rolling(7).mean()
Ans.head(9)
โ ๋ฏธ์ธ๋จผ์ง Data Load
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/seoul_pm.csv'
df = pd.read_csv(DataUrl)
โ datetime ํํ๋ก ๋ณํ
# ๋
-์-์ผ:์ ์ปฌ๋ผ์ pandas์์ ์ธ์ํ ์ ์๋ datetime ํํ๋ก ๋ณ๊ฒฝํ๊ธฐ
# ์์ธ์์ ์ ๊ณต๋ฐ์ดํฐ์ ๊ฒฝ์ฐ 0์๊ฐ 24์๋ก ํํ
def Change_date(x):
import datetime
hour = x.split(':')[1]
date = x.split(":")[0]
if hour == '24':
hour = '00:00:00'
FinalDate = pd.to_datetime(date+" "+hour)+datetime.timedelta(days=1)
else:
hour = hour +':00:00'
FinalDate = pd.to_datetime(date+" "+hour)
return FinalDate
df['(๋
-์-์ผ:์)'] = df['(๋
-์-์ผ:์)'].apply(Change_date)
Ans = df
Ans.head(3)
โ ์ผ์๋ณ ์์ด์์ผ ์ด๋ฆ ์ ์ฅ
# ์ผ์๋ณ ์์ด์์ผ ์ด๋ฆ์ dayName ์ปฌ๋ผ์ ์ ์ฅํ๊ธฐ
df['dayName'] = df['(๋
-์-์ผ:์)'].dt.day_name()
Ans = df['dayName']
Ans.head(5)
0 Saturday
1 Saturday
2 Saturday
3 Saturday
4 Saturday
Name: dayName, dtype: object
โ ์ผ์๋ณ ๊ฐ PM10 ๋ฑ๊ธ์ ๋น๋์ ํ์
# ์ผ์๋ณ ๊ฐ PM10 ๋ฑ๊ธ์ ๋น๋์ ํ์
ํ๊ธฐ
Ans1 = df.groupby(['dayName','PM10๋ฑ๊ธ'],as_index=False).size()
Ans1.head()
Ans2 = Ans1.pivot(index='dayName',columns='PM10๋ฑ๊ธ',values='size').fillna(0)
Ans2
โ ์๊ฐ์ ์ฐ์, ๊ฒฐ์ธก์น ํ์ธ
# ์๊ฐ์ด ์ฐ์์ ์ผ๋ก ์กด์ฌํ๋ฉฐ ๊ฒฐ์ธก์น๊ฐ ์๋์ง ํ์ธํ๊ธฐ
check = len(df['(๋
-์-์ผ:์)'].diff().unique())
# ์๊ฐ์ ์ฐจ๋ถํ๋ฉด ์ฒซ ๊ฐ์ nan, ์ดํ ๋ชจ๋ ์ฐจ๋ถ๊ฐ์ด ๋์ผํ๋ฉด ์ฐ์์ด๋ผ ํ๋จํจ
if check ==2:
Ans = True
else:
Ans = False
Ans
True
โ ํ๊ท ๊ฐ ๊ตฌํ๊ธฐ
# ์ค์ 10์์ ์คํ 10์(22์)์ PM10์ ํ๊ท ๊ฐ์ ๊ฐ๊ฐ ๊ตฌํ๊ธฐ
Ans = df.groupby(df['(๋
-์-์ผ:์)'].dt.hour)['PM10'].mean().iloc[[10,22]].to_frame()
Ans
โ ๋ ์ง ์ปฌ๋ผ์ Index ๋ก ๋ง๋ค๊ธฐ
# ๋ ์ง ์ปฌ๋ผ์ index๋ก ๋ง๋ค๊ธฐ
df.set_index('(๋
-์-์ผ:์)',inplace=True,drop=True)
Ans = df
Ans.head(3)
๋ฐ์ํ
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python]Pandas _ Merge, Concat (0) | 2023.08.29 |
---|---|
[Python] Pandas _ Pivot (0) | 2023.08.24 |
[Python] Pandas _ Apply, Map (0) | 2023.08.24 |
[Python] Pandas data ์ฒ๋ฆฌ (0) | 2023.05.01 |
[Python] Pandas data: auto-mpg data ์๊ฐํ (0) | 2023.04.30 |