작성일자 : 2023-10-30
Ver 0.1.1
33 ~ 100 문제 풀이 : https://youtu.be/00rctVVSSoA?si=Du3KDMiQeHq7Gp-F
import pandas as pd
df7 = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/timeTest.csv')
df7.head()
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2061-01-01 | 15.04 | 14.96 | 13.17 | 9.29 | NaN | 9.87 | 13.67 | 10.25 | 10.83 | 12.58 | 18.50 | 15.04 |
1 | 2061-01-02 | 14.71 | NaN | 10.83 | 6.50 | 12.62 | 7.67 | 11.50 | 10.04 | 9.79 | 9.67 | 17.54 | 13.83 |
2 | 2061-01-03 | 18.50 | 16.88 | 12.33 | 10.13 | 11.17 | 6.17 | 11.25 | NaN | 8.50 | 7.67 | 12.75 | 12.71 |
3 | 2061-01-04 | 10.58 | 6.63 | 11.75 | 4.58 | 4.54 | 2.88 | 8.63 | 1.79 | 5.83 | 5.88 | 5.46 | 10.88 |
4 | 2061-01-05 | 13.33 | 13.25 | 11.42 | 6.17 | 10.71 | 8.21 | 11.92 | 6.54 | 10.92 | 10.34 | 12.92 | 11.83 |
Q64. 데이터를 로드하고 각 열의 데이터 타입을 파악하라
df7.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
Q65. Yr_Mo_Dy을 판다스에서 인식할 수 있는 datetime64타입으로 변경하라
df7.Yr_Mo_Dy = pd.to_datetime(df7.Yr_Mo_Dy)
Ans = df7.Yr_Mo_Dy
pd.to_datetime(df7['Yr_Mo_Dy'])
0 2061-01-01 1 2061-01-02 2 2061-01-03 3 2061-01-04 4 2061-01-05 ... 6569 1978-12-27 6570 1978-12-28 6571 1978-12-29 6572 1978-12-30 6573 1978-12-31 Name: Yr_Mo_Dy, Length: 6574, dtype: datetime64[ns]
df7.head()
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2061-01-01 | 15.04 | 14.96 | 13.17 | 9.29 | NaN | 9.87 | 13.67 | 10.25 | 10.83 | 12.58 | 18.50 | 15.04 |
1 | 2061-01-02 | 14.71 | NaN | 10.83 | 6.50 | 12.62 | 7.67 | 11.50 | 10.04 | 9.79 | 9.67 | 17.54 | 13.83 |
2 | 2061-01-03 | 18.50 | 16.88 | 12.33 | 10.13 | 11.17 | 6.17 | 11.25 | NaN | 8.50 | 7.67 | 12.75 | 12.71 |
3 | 2061-01-04 | 10.58 | 6.63 | 11.75 | 4.58 | 4.54 | 2.88 | 8.63 | 1.79 | 5.83 | 5.88 | 5.46 | 10.88 |
4 | 2061-01-05 | 13.33 | 13.25 | 11.42 | 6.17 | 10.71 | 8.21 | 11.92 | 6.54 | 10.92 | 10.34 | 12.92 | 11.83 |
df7.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 datetime64[ns] 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: datetime64[ns](1), float64(12) memory usage: 667.8 KB
Q66. Yr_Mo_Dy에 존재하는 년도의 유일값을 모두 출력하라
sorted(df7.Yr_Mo_Dy.dt.year.unique())
[1971.0, 1972.0, 1973.0, 1974.0, 1975.0, 1976.0, 1977.0, 1978.0, 2061.0, 2062.0, 2063.0, 2064.0, 2065.0, 2066.0, 2067.0, 2068.0, 2069.0, 2070.0, nan]
Q67. Yr_Mo_Dy에 년도가 2061년 이상의 경우에는 모두 잘못된 데이터이다. 해당경우의 값은 100을 빼서 새롭게 날짜를 Yr_Mo_Dy 컬럼에 정의하라
df7.loc['Yr_Mo_Dy'] = pd.to_datetime(df7['Yr_Mo_Dy'].astype('str').map(lambda x : str(int(x[ : 4]) -100) + x[4:] if x[:4] >= '2061' else x ))
df7
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2061-01-01 | 15.04 | 14.96 | 13.17 | 9.29 | NaN | 9.87 | 13.67 | 10.25 | 10.83 | 12.58 | 18.5 | 15.04 |
1 | 2061-01-02 | 14.71 | NaN | 10.83 | 6.5 | 12.62 | 7.67 | 11.5 | 10.04 | 9.79 | 9.67 | 17.54 | 13.83 |
2 | 2061-01-03 | 18.5 | 16.88 | 12.33 | 10.13 | 11.17 | 6.17 | 11.25 | NaN | 8.5 | 7.67 | 12.75 | 12.71 |
3 | 2061-01-04 | 10.58 | 6.63 | 11.75 | 4.58 | 4.54 | 2.88 | 8.63 | 1.79 | 5.83 | 5.88 | 5.46 | 10.88 |
4 | 2061-01-05 | 13.33 | 13.25 | 11.42 | 6.17 | 10.71 | 8.21 | 11.92 | 6.54 | 10.92 | 10.34 | 12.92 | 11.83 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
6570 | 1978-12-28 | 13.21 | 5.46 | 13.46 | 5.0 | 8.12 | 9.42 | 14.33 | 16.25 | 15.25 | 18.05 | 21.79 | 41.46 |
6571 | 1978-12-29 | 14.0 | 10.29 | 14.42 | 8.71 | 9.71 | 10.54 | 19.17 | 12.46 | 14.5 | 16.42 | 18.88 | 29.58 |
6572 | 1978-12-30 | 18.5 | 14.04 | 21.29 | 9.13 | 12.75 | 9.71 | 18.08 | 12.87 | 12.46 | 12.12 | 14.67 | 28.79 |
6573 | 1978-12-31 | 20.33 | 17.41 | 27.29 | 9.59 | 12.08 | 10.13 | 19.25 | 11.63 | 11.58 | 11.38 | 12.08 | 22.08 |
Yr_Mo_Dy | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT | NaT |
6575 rows × 13 columns
def fix_century(x):
import datetime
year = x.year - 100 if x.year >= 2061 else x.year
return pd.to_datetime(datetime.date(year, x.month, x.day))
df7['Yr_Mo_Dy'] = df7['Yr_Mo_Dy'].apply(fix_century)
Ans
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1961-01-01 | 15.04 | 14.96 | 13.17 | 9.29 | NaN | 9.87 | 13.67 | 10.25 | 10.83 | 12.58 | 18.50 | 15.04 |
1 | 1961-01-02 | 14.71 | NaN | 10.83 | 6.50 | 12.62 | 7.67 | 11.50 | 10.04 | 9.79 | 9.67 | 17.54 | 13.83 |
2 | 1961-01-03 | 18.50 | 16.88 | 12.33 | 10.13 | 11.17 | 6.17 | 11.25 | NaN | 8.50 | 7.67 | 12.75 | 12.71 |
3 | 1961-01-04 | 10.58 | 6.63 | 11.75 | 4.58 | 4.54 | 2.88 | 8.63 | 1.79 | 5.83 | 5.88 | 5.46 | 10.88 |
Q68. 년도별 각컬럼의 평균값을 구하여라
df7.groupby(df7['Yr_Mo_Dy'].dt.year).mean()
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Yr_Mo_Dy | |||||||||||||
1961 | 1961-07-02 00:00:00 | 12.299583 | 10.351796 | 11.362369 | 6.958227 | 10.881763 | 7.729726 | 9.733923 | 8.858788 | 8.647652 | 9.835577 | 13.502795 | 13.680773 |
1962 | 1962-07-02 00:00:00 | 12.246923 | 10.110438 | 11.732712 | 6.960440 | 10.657918 | 7.393068 | 11.020712 | 8.793753 | 8.316822 | 9.676247 | 12.930685 | 14.323956 |
1963 | 1963-07-02 00:00:00 | 12.813452 | 10.836986 | 12.541151 | 7.330055 | 11.724110 | 8.434712 | 11.075699 | 10.336548 | 8.903589 | 10.224438 | 13.638877 | 14.999014 |
1964 | 1964-07-01 12:00:00 | 12.363661 | 10.920164 | 12.104372 | 6.787787 | 11.454481 | 7.570874 | 10.259153 | 9.467350 | 7.789016 | 10.207951 | 13.740546 | 14.910301 |
1965 | 1965-07-02 00:00:00 | 12.451370 | 11.075534 | 11.848767 | 6.858466 | 11.024795 | 7.478110 | 10.618712 | 8.879918 | 7.907425 | 9.918082 | 12.964247 | 15.591644 |
1966 | 1966-07-02 00:00:00 | 13.461973 | 11.557205 | 12.020630 | 7.345726 | 11.805041 | 7.793671 | 10.579808 | 8.835096 | 8.514438 | 9.768959 | 14.265836 | 16.307260 |
1967 | 1967-07-02 00:00:00 | 12.737151 | 10.990986 | 11.739397 | 7.143425 | 11.630740 | 7.368164 | 10.652027 | 9.325616 | 8.645014 | 9.547425 | 14.774548 | 17.135945 |
1968 | 1968-07-01 12:00:00 | 11.835628 | 10.468197 | 11.409754 | 6.477678 | 10.760765 | 6.067322 | 8.859180 | 8.255519 | 7.224945 | 7.832978 | 12.808634 | 15.017486 |
1969 | 1969-07-02 00:00:00 | 11.166356 | 9.723699 | 10.902000 | 5.767973 | 9.873918 | 6.189973 | 8.564493 | 7.711397 | 7.924521 | 7.754384 | 12.621233 | 15.762904 |
1970 | 1970-07-02 00:00:00 | 12.600329 | 10.726932 | 11.730247 | 6.217178 | 10.567370 | 7.609452 | 9.609890 | 8.334630 | 9.297616 | 8.289808 | 13.183644 | 16.456027 |
1971 | 1971-07-02 00:00:00 | 11.273123 | 9.095178 | 11.088329 | 5.241507 | 9.440329 | 6.097151 | 8.385890 | 6.757315 | 7.915370 | 7.229753 | 12.208932 | 15.025233 |
1972 | 1972-07-01 12:00:00 | 12.463962 | 10.561311 | 12.058333 | 5.929699 | 9.430410 | 6.358825 | 9.704508 | 7.680792 | 8.357295 | 7.515273 | 12.727377 | 15.028716 |
1973 | 1973-07-02 00:00:00 | 11.828466 | 10.680493 | 10.680493 | 5.547863 | 9.640877 | 6.548740 | 8.482110 | 7.614274 | 8.245534 | 7.812411 | 12.169699 | 15.441096 |
1974 | 1974-07-02 00:00:00 | 13.643096 | 11.811781 | 12.336356 | 6.427041 | 11.110986 | 6.809781 | 10.084603 | 9.896986 | 9.331753 | 8.736356 | 13.252959 | 16.947671 |
1975 | 1975-07-02 00:00:00 | 12.008575 | 10.293836 | 11.564712 | 5.269096 | 9.190082 | 5.668521 | 8.562603 | 7.843836 | 8.797945 | 7.382822 | 12.631671 | 15.307863 |
1976 | 1976-07-01 12:00:00 | 11.737842 | 10.203115 | 10.761230 | 5.109426 | 8.846339 | 6.311038 | 9.149126 | 7.146202 | 8.883716 | 7.883087 | 12.332377 | 15.471448 |
1977 | 1977-07-02 00:00:00 | 13.099616 | 11.144493 | 12.627836 | 6.073945 | 10.003836 | 8.586438 | 11.523205 | 8.378384 | 9.098192 | 8.821616 | 13.459068 | 16.590849 |
1978 | 1978-07-02 00:00:00 | 12.504356 | 11.044274 | 11.380000 | 6.082356 | 10.167233 | 7.650658 | 9.489342 | 8.800466 | 9.089753 | 8.301699 | 12.967397 | 16.771370 |
Q69. weekday컬럼을 만들고 요일별로 매핑하라 ( 월요일: 0 ~ 일요일 :6)
df7['Yr_Mo_Dy'].dt.day_name()
0 Sunday 1 Monday 2 Tuesday 3 Wednesday 4 Thursday ... 6569 Wednesday 6570 Thursday 6571 Friday 6572 Saturday 6573 Sunday Name: Yr_Mo_Dy, Length: 6574, dtype: object
df7['Yr_Mo_Dy'].dt.day_of_week
0 6 1 0 2 1 3 2 4 3 .. 6569 2 6570 3 6571 4 6572 5 6573 6 Name: Yr_Mo_Dy, Length: 6574, dtype: int32
df7['weekday'] = df7.Yr_Mo_Dy.dt.weekday
Ans = df7['weekday'].to_frame()
Ans
weekday | |
---|---|
0 | 6 |
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
... | ... |
6569 | 2 |
6570 | 3 |
6571 | 4 |
6572 | 5 |
6573 | 6 |
6574 rows × 1 columns
Q70. weekday컬럼을 기준으로 주말이면 1 평일이면 0의 값을 가지는 WeekCheck 컬럼을 만들어라
df7['WeekCheck'] = df7['weekday'].map(lambda x : 1 if x in [5,6] else 0)
Ans = df7['WeekCheck'].to_frame()
Ans
WeekCheck | |
---|---|
0 | 1 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 0 |
... | ... |
6569 | 0 |
6570 | 0 |
6571 | 0 |
6572 | 1 |
6573 | 1 |
6574 rows × 1 columns
Q71. 년도, 일자 상관없이 모든 컬럼의 각 달의 평균을 구하여라
Ans = df7.groupby(df7['Yr_Mo_Dy'].dt.month).mean()
Ans
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Yr_Mo_Dy | |||||||||||||||
1 | 1969-07-17 06:40:00.000000000 | 14.847325 | 12.914560 | 13.299624 | 7.199498 | 11.667734 | 8.054839 | 11.819355 | 9.512047 | 9.543208 | 10.053566 | 14.550520 | 18.028763 | 2.989247 | 0.284946 |
2 | 1969-08-17 07:50:33.070866142 | 13.710906 | 12.111122 | 12.879132 | 6.942411 | 11.551772 | 7.633858 | 11.206024 | 9.341437 | 9.313169 | 9.518051 | 13.728898 | 17.156142 | 3.005906 | 0.287402 |
3 | 1969-09-14 12:00:00.000000000 | 13.158687 | 11.505842 | 12.648118 | 7.265907 | 11.554516 | 7.959409 | 11.310179 | 9.635896 | 9.700324 | 10.096953 | 13.810609 | 16.909317 | 3.000000 | 0.283154 |
4 | 1969-10-15 00:00:00.000000000 | 12.555648 | 10.429759 | 12.204815 | 6.898037 | 10.677667 | 7.441389 | 10.221315 | 8.909056 | 8.930870 | 9.158019 | 12.664759 | 14.937611 | 3.011111 | 0.288889 |
5 | 1969-11-14 12:00:00.000000000 | 11.724032 | 10.145619 | 11.550394 | 6.307487 | 10.224301 | 6.942061 | 8.797738 | 8.452903 | 8.040806 | 8.524857 | 12.767258 | 13.736039 | 2.982079 | 0.283154 |
6 | 1969-12-15 00:00:00.000000000 | 10.451317 | 8.949704 | 10.361315 | 5.652278 | 9.529926 | 6.410093 | 8.009556 | 7.920796 | 7.639796 | 7.729185 | 12.246407 | 12.861818 | 3.007407 | 0.285185 |
7 | 1970-01-14 12:00:00.000000000 | 9.992007 | 8.357778 | 9.349642 | 5.416935 | 9.302634 | 5.972348 | 7.843501 | 7.262760 | 7.544480 | 7.321416 | 11.676505 | 12.800789 | 3.001792 | 0.288530 |
8 | 1970-02-14 12:00:00.000000000 | 10.213411 | 8.415143 | 9.993441 | 5.270681 | 8.901559 | 5.891057 | 7.772312 | 6.842025 | 7.240573 | 7.002783 | 11.110090 | 12.565943 | 2.991039 | 0.283154 |
9 | 1970-03-17 00:00:00.000000000 | 11.458519 | 9.981002 | 10.756883 | 5.615176 | 9.766315 | 6.566222 | 8.609722 | 7.745677 | 7.610556 | 7.689278 | 12.686389 | 14.761963 | 3.009259 | 0.287037 |
10 | 1970-04-16 12:00:00.000000000 | 12.660610 | 11.010681 | 11.453943 | 6.065215 | 10.550251 | 7.159910 | 9.387778 | 8.726308 | 8.347181 | 8.850376 | 14.155323 | 16.697151 | 2.998208 | 0.286738 |
11 | 1970-05-17 00:00:00.000000000 | 13.200722 | 11.639500 | 12.293407 | 6.247611 | 10.501130 | 7.134333 | 10.814861 | 8.427167 | 8.604000 | 8.943167 | 13.815741 | 18.114185 | 2.992593 | 0.283333 |
12 | 1970-06-16 12:00:00.000000000 | 14.446398 | 12.353602 | 13.212276 | 6.829910 | 11.301254 | 7.963710 | 11.849050 | 9.209355 | 9.447258 | 9.627670 | 14.259516 | 18.697599 | 3.017921 | 0.288530 |
Q72. 모든 결측치는 컬럼기준 직전의 값으로 대체하고 첫번째 행에 결측치가 있을경우 뒤에있는 값으로 대채하라
df7.isnull().sum(0)
Yr_Mo_Dy 0 RPT 6 VAL 3 ROS 2 KIL 5 SHA 2 BIR 0 DUB 3 CLA 2 MUL 3 CLO 1 BEL 0 MAL 4 weekday 0 WeekCheck 0 dtype: int64
df7.loc[df7['RPT'].isnull()]
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
28 | 1961-01-29 | NaN | 23.91 | 22.29 | 17.54 | 24.08 | 19.70 | 22.00 | 20.25 | 21.46 | 19.95 | 27.71 | 23.38 | 6 | 1 |
70 | 1961-03-12 | NaN | 13.88 | 16.38 | 10.25 | 14.92 | 13.67 | 17.12 | 13.70 | 16.29 | 15.79 | 20.50 | 22.54 | 6 | 1 |
179 | 1961-06-29 | NaN | 10.46 | 7.96 | 6.79 | 12.62 | 7.08 | 8.33 | 9.46 | 7.08 | 10.92 | 20.88 | 10.79 | 3 | 0 |
222 | 1961-08-11 | NaN | 6.75 | 8.29 | 5.00 | 8.58 | 4.83 | 6.83 | 6.25 | 5.79 | 5.25 | 5.88 | 8.38 | 4 | 0 |
284 | 1961-10-12 | NaN | 8.71 | 4.67 | 3.67 | 9.08 | 6.54 | 5.58 | 6.38 | 4.00 | 5.37 | 12.46 | 10.75 | 3 | 0 |
427 | 1962-03-04 | NaN | 5.33 | 13.50 | 6.13 | 6.46 | 2.71 | 5.33 | 3.79 | 4.46 | 4.04 | 2.71 | 7.08 | 6 | 1 |
df7.iloc[ 27 : 30, :]
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
27 | 1961-01-28 | 17.67 | 13.54 | 13.33 | 8.87 | 15.04 | 11.63 | 12.25 | 10.58 | 11.92 | 11.04 | 20.30 | 18.12 | 5 | 1 |
28 | 1961-01-29 | NaN | 23.91 | 22.29 | 17.54 | 24.08 | 19.70 | 22.00 | 20.25 | 21.46 | 19.95 | 27.71 | 23.38 | 6 | 1 |
29 | 1961-01-30 | 12.21 | 11.42 | 10.92 | 7.92 | 13.08 | 9.62 | 14.50 | 10.21 | 9.92 | 11.96 | 18.88 | 19.25 | 0 | 0 |
df7.iloc[ 27 : 30, :].fillna(method='ffill')
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
27 | 1961-01-28 | 17.67 | 13.54 | 13.33 | 8.87 | 15.04 | 11.63 | 12.25 | 10.58 | 11.92 | 11.04 | 20.30 | 18.12 | 5 | 1 |
28 | 1961-01-29 | 17.67 | 23.91 | 22.29 | 17.54 | 24.08 | 19.70 | 22.00 | 20.25 | 21.46 | 19.95 | 27.71 | 23.38 | 6 | 1 |
29 | 1961-01-30 | 12.21 | 11.42 | 10.92 | 7.92 | 13.08 | 9.62 | 14.50 | 10.21 | 9.92 | 11.96 | 18.88 | 19.25 | 0 | 0 |
df7.iloc[ 27 : 30, :].fillna(method='bfill')
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
27 | 1961-01-28 | 17.67 | 13.54 | 13.33 | 8.87 | 15.04 | 11.63 | 12.25 | 10.58 | 11.92 | 11.04 | 20.30 | 18.12 | 5 | 1 |
28 | 1961-01-29 | 12.21 | 23.91 | 22.29 | 17.54 | 24.08 | 19.70 | 22.00 | 20.25 | 21.46 | 19.95 | 27.71 | 23.38 | 6 | 1 |
29 | 1961-01-30 | 12.21 | 11.42 | 10.92 | 7.92 | 13.08 | 9.62 | 14.50 | 10.21 | 9.92 | 11.96 | 18.88 | 19.25 | 0 | 0 |
df7.loc[df7['RPT'].isnull()].fillna(method= 'ffill')
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
28 | 1961-01-29 | NaN | 23.91 | 22.29 | 17.54 | 24.08 | 19.70 | 22.00 | 20.25 | 21.46 | 19.95 | 27.71 | 23.38 | 6 | 1 |
70 | 1961-03-12 | NaN | 13.88 | 16.38 | 10.25 | 14.92 | 13.67 | 17.12 | 13.70 | 16.29 | 15.79 | 20.50 | 22.54 | 6 | 1 |
179 | 1961-06-29 | NaN | 10.46 | 7.96 | 6.79 | 12.62 | 7.08 | 8.33 | 9.46 | 7.08 | 10.92 | 20.88 | 10.79 | 3 | 0 |
222 | 1961-08-11 | NaN | 6.75 | 8.29 | 5.00 | 8.58 | 4.83 | 6.83 | 6.25 | 5.79 | 5.25 | 5.88 | 8.38 | 4 | 0 |
284 | 1961-10-12 | NaN | 8.71 | 4.67 | 3.67 | 9.08 | 6.54 | 5.58 | 6.38 | 4.00 | 5.37 | 12.46 | 10.75 | 3 | 0 |
427 | 1962-03-04 | NaN | 5.33 | 13.50 | 6.13 | 6.46 | 2.71 | 5.33 | 3.79 | 4.46 | 4.04 | 2.71 | 7.08 | 6 | 1 |
df7 = df7.fillna(method='ffill').fillna(method='bfill')
df7.isnull().sum(0)
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 WeekCheck 0 dtype: int64
Q73. 년도 - 월을 기준으로 모든 컬럼의 평균값을 구하여라
df7['Yr_Mo_Dy'].dt.strftime('%Y').head()
0 1961 1 1961 2 1961 3 1961 4 1961 Name: Yr_Mo_Dy, dtype: object
df7['Yr_Mo_Dy'].dt.strftime('%y-%m-%d').head()
0 61-01-01 1 61-01-02 2 61-01-03 3 61-01-04 4 61-01-05 Name: Yr_Mo_Dy, dtype: object
df7['Yr_Mo_Dy'].dt.strftime('%Y-%m-%d').head()
0 1961-01-01 1 1961-01-02 2 1961-01-03 3 1961-01-04 4 1961-01-05 Name: Yr_Mo_Dy, dtype: object
df7['Yr_Mo_Dy'].dt.strftime('%Y-%m-%d %H:%M:%S').head()
0 1961-01-01 00:00:00 1 1961-01-02 00:00:00 2 1961-01-03 00:00:00 3 1961-01-04 00:00:00 4 1961-01-05 00:00:00 Name: Yr_Mo_Dy, dtype: object
df7.groupby(df7['Yr_Mo_Dy'].dt.strftime('%Y-%m')).mean()
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Yr_Mo_Dy | |||||||||||||||
1961-01 | 1961-01-16 00:00:00 | 14.841333 | 11.988333 | 13.431613 | 7.736774 | 11.072759 | 8.588065 | 11.184839 | 9.245333 | 9.085806 | 10.107419 | 13.880968 | 14.703226 | 2.935484 | 0.290323 |
1961-02 | 1961-02-14 12:00:00 | 16.269286 | 14.975357 | 14.441481 | 9.230741 | 13.852143 | 10.937500 | 11.890714 | 11.846071 | 11.821429 | 12.714286 | 18.583214 | 15.411786 | 3.000000 | 0.285714 |
1961-03 | 1961-03-16 00:00:00 | 10.890000 | 11.296452 | 10.752903 | 7.284000 | 10.509355 | 8.866774 | 9.644194 | 9.829677 | 10.294138 | 11.251935 | 16.410968 | 15.720000 | 3.000000 | 0.258065 |
1961-04 | 1961-04-15 12:00:00 | 10.722667 | 9.427667 | 9.998000 | 5.830667 | 8.435000 | 6.495000 | 6.925333 | 7.094667 | 7.342333 | 7.237000 | 11.147333 | 10.278333 | 3.166667 | 0.333333 |
1961-05 | 1961-05-16 00:00:00 | 9.860968 | 8.850000 | 10.818065 | 5.905333 | 9.490323 | 6.574839 | 7.604000 | 8.177097 | 8.039355 | 8.499355 | 11.900323 | 12.011613 | 2.806452 | 0.258065 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
1978-08 | 1978-08-16 00:00:00 | 9.645161 | 8.259355 | 9.032258 | 4.502903 | 7.368065 | 5.935161 | 5.650323 | 5.417742 | 7.241290 | 5.536774 | 10.466774 | 12.054194 | 2.903226 | 0.258065 |
1978-09 | 1978-09-15 12:00:00 | 10.913667 | 10.895000 | 10.635000 | 5.725000 | 10.372000 | 9.278333 | 10.790333 | 9.583000 | 10.069333 | 8.939000 | 15.680333 | 19.391333 | 3.100000 | 0.300000 |
1978-10 | 1978-10-16 00:00:00 | 9.897742 | 8.670968 | 9.295806 | 4.721290 | 8.525161 | 6.774194 | 8.115484 | 7.337742 | 8.297742 | 8.243871 | 13.776774 | 17.150000 | 2.935484 | 0.290323 |
1978-11 | 1978-11-15 12:00:00 | 16.151667 | 14.802667 | 13.508000 | 7.317333 | 11.475000 | 8.743000 | 11.492333 | 9.657333 | 10.701333 | 10.676000 | 17.404667 | 20.723000 | 2.966667 | 0.266667 |
1978-12 | 1978-12-16 00:00:00 | 16.175484 | 13.748065 | 15.635161 | 7.094839 | 11.398710 | 9.241613 | 12.077419 | 10.194839 | 10.616774 | 11.028710 | 13.859677 | 21.371613 | 3.193548 | 0.322581 |
216 rows × 15 columns
Ans = df7.groupby(df7['Yr_Mo_Dy'].dt.to_period('M')).mean()
Ans.head()
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Yr_Mo_Dy | |||||||||||||||
1961-01 | 1961-01-16 00:00:00 | 14.841333 | 11.988333 | 13.431613 | 7.736774 | 11.072759 | 8.588065 | 11.184839 | 9.245333 | 9.085806 | 10.107419 | 13.880968 | 14.703226 | 2.935484 | 0.290323 |
1961-02 | 1961-02-14 12:00:00 | 16.269286 | 14.975357 | 14.441481 | 9.230741 | 13.852143 | 10.937500 | 11.890714 | 11.846071 | 11.821429 | 12.714286 | 18.583214 | 15.411786 | 3.000000 | 0.285714 |
1961-03 | 1961-03-16 00:00:00 | 10.890000 | 11.296452 | 10.752903 | 7.284000 | 10.509355 | 8.866774 | 9.644194 | 9.829677 | 10.294138 | 11.251935 | 16.410968 | 15.720000 | 3.000000 | 0.258065 |
1961-04 | 1961-04-15 12:00:00 | 10.722667 | 9.427667 | 9.998000 | 5.830667 | 8.435000 | 6.495000 | 6.925333 | 7.094667 | 7.342333 | 7.237000 | 11.147333 | 10.278333 | 3.166667 | 0.333333 |
1961-05 | 1961-05-16 00:00:00 | 9.860968 | 8.850000 | 10.818065 | 5.905333 | 9.490323 | 6.574839 | 7.604000 | 8.177097 | 8.039355 | 8.499355 | 11.900323 | 12.011613 | 2.806452 | 0.258065 |
Q74. RPT 컬럼의 값을 일자별 기준으로 1차차분하라
df7.loc[ : ,'RPT diff'] = df7['RPT'].diff()
df7
Yr_Mo_Dy | RPT | VAL | ROS | KIL | SHA | BIR | DUB | CLA | MUL | CLO | BEL | MAL | weekday | WeekCheck | RPT diff | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1961-01-01 | 15.04 | 14.96 | 13.17 | 9.29 | NaN | 9.87 | 13.67 | 10.25 | 10.83 | 12.58 | 18.50 | 15.04 | 6 | 1 | NaN |
1 | 1961-01-02 | 14.71 | NaN | 10.83 | 6.50 | 12.62 | 7.67 | 11.50 | 10.04 | 9.79 | 9.67 | 17.54 | 13.83 | 0 | 0 | -0.33 |
2 | 1961-01-03 | 18.50 | 16.88 | 12.33 | 10.13 | 11.17 | 6.17 | 11.25 | NaN | 8.50 | 7.67 | 12.75 | 12.71 | 1 | 0 | 3.79 |
3 | 1961-01-04 | 10.58 | 6.63 | 11.75 | 4.58 | 4.54 | 2.88 | 8.63 | 1.79 | 5.83 | 5.88 | 5.46 | 10.88 | 2 | 0 | -7.92 |
4 | 1961-01-05 | 13.33 | 13.25 | 11.42 | 6.17 | 10.71 | 8.21 | 11.92 | 6.54 | 10.92 | 10.34 | 12.92 | 11.83 | 3 | 0 | 2.75 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
6569 | 1978-12-27 | 17.58 | 16.96 | 17.62 | 8.08 | 13.21 | 11.67 | 14.46 | 15.59 | 14.04 | 14.00 | 17.21 | 40.08 | 2 | 0 | 3.75 |
6570 | 1978-12-28 | 13.21 | 5.46 | 13.46 | 5.00 | 8.12 | 9.42 | 14.33 | 16.25 | 15.25 | 18.05 | 21.79 | 41.46 | 3 | 0 | -4.37 |
6571 | 1978-12-29 | 14.00 | 10.29 | 14.42 | 8.71 | 9.71 | 10.54 | 19.17 | 12.46 | 14.50 | 16.42 | 18.88 | 29.58 | 4 | 0 | 0.79 |
6572 | 1978-12-30 | 18.50 | 14.04 | 21.29 | 9.13 | 12.75 | 9.71 | 18.08 | 12.87 | 12.46 | 12.12 | 14.67 | 28.79 | 5 | 1 | 4.50 |
6573 | 1978-12-31 | 20.33 | 17.41 | 27.29 | 9.59 | 12.08 | 10.13 | 19.25 | 11.63 | 11.58 | 11.38 | 12.08 | 22.08 | 6 | 1 | 1.83 |
6574 rows × 16 columns
df7.loc[ 2:4 , ('RPT', 'RPT diff')]
RPT | RPT diff | |
---|---|---|
2 | 18.50 | 3.79 |
3 | 10.58 | -7.92 |
4 | 13.33 | 2.75 |
Q75. RPT와 VAL의 컬럼을 일주일 간격으로 각각 이동평균한값을 구하여라
Ans= df7[['RPT','VAL']].rolling(7).mean() #N개 행씩 평균 계산
Ans.head(9)
RPT | VAL | |
---|---|---|
0 | NaN | NaN |
1 | NaN | NaN |
2 | NaN | NaN |
3 | NaN | NaN |
4 | NaN | NaN |
5 | NaN | NaN |
6 | 14.124286 | 12.727143 |
7 | 13.541429 | 11.982857 |
8 | 13.237143 | 11.392857 |
서울시 미세먼지 데이터 : https://www.airkorea.or.kr/web/realSearch?pMENU_NO=97
DataUrl = https://raw.githubusercontent.com/Datamanim/pandas/main/seoul_pm.csv
Q76. 년-월-일:시 컬럼을 pandas에서 인식할 수 있는 datetime 형태로 변경하라. 서울시의 제공데이터의 경우 0시가 24시로 표현된다
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/seoul_pm.csv')
df.head()
(년-월-일:시) | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 |
1 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 |
2 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 |
3 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 |
4 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 |
df = df.rename( columns = {'(년-월-일:시)' : 'date'} )
df.head()
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 |
1 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 |
2 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 |
3 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 |
4 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 |
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1239 entries, 0 to 1238 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 date 1239 non-null object 1 PM10등급 1233 non-null object 2 PM10 1233 non-null float64 3 PM2.5등급 1232 non-null object 4 PM2.5 1232 non-null float64 5 오존등급 1232 non-null object 6 오존 1232 non-null float64 7 이산화질소등급 1232 non-null object 8 이산화질소 1232 non-null float64 9 일산화탄소등급 1232 non-null object 10 일산화탄소 1232 non-null float64 11 아황산가스등급 1232 non-null object 12 아황산가스 1232 non-null float64 dtypes: float64(6), object(7) memory usage: 126.0+ KB
df.loc[df['date'].str[ -2 : ] == '24'].head() #이런 데이터는 다음 날 00시로 표시가 되어야 함
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
15 | 2021-05-14:24 | 보통 | 80.0 | 나쁨 | 52.0 | 좋음 | 0.014 | 보통 | 0.054 | 좋음 | 0.7 | 좋음 | 0.006 |
39 | 2021-05-13:24 | 보통 | 49.0 | 보통 | 24.0 | 좋음 | 0.024 | 보통 | 0.035 | 좋음 | 0.5 | 좋음 | 0.004 |
63 | 2021-05-12:24 | 보통 | 38.0 | 보통 | 20.0 | 좋음 | 0.016 | 보통 | 0.050 | 좋음 | 0.5 | 좋음 | 0.001 |
87 | 2021-05-11:24 | 좋음 | 19.0 | 좋음 | 8.0 | 좋음 | 0.024 | 보통 | 0.032 | 좋음 | 0.4 | 좋음 | 0.001 |
111 | 2021-05-10:24 | 좋음 | 19.0 | 좋음 | 10.0 | 좋음 | 0.014 | 보통 | 0.035 | 좋음 | 0.5 | 좋음 | 0.001 |
import datetime
a = '2021-05-14:24'
pd.to_datetime(a.split(':')[0])
Timestamp('2021-05-14 00:00:00')
pd.to_datetime(a.split(':')[0]) + datetime.timedelta(days = 1 )
Timestamp('2021-05-15 00:00:00')
def date_ft(x) :
if x[-2 : ] != '24' :
x = x.replace( ':' , ' ')
return pd.to_datetime(x)
else:
date = pd.to_datetime(x.split(':')[0]) + datetime.timedelta( days= 1)
return date
df
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 |
1 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 |
2 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 |
3 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 |
4 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
1234 | 2021-03-25:05 | 보통 | 39.0 | 보통 | 18.0 | 좋음 | 0.026 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 |
1235 | 2021-03-25:04 | 보통 | 34.0 | 좋음 | 15.0 | 좋음 | 0.017 | 보통 | 0.033 | 좋음 | 0.4 | 좋음 | 0.002 |
1236 | 2021-03-25:03 | 보통 | 35.0 | 좋음 | 13.0 | 좋음 | 0.029 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 |
1237 | 2021-03-25:02 | 보통 | 35.0 | 좋음 | 13.0 | 보통 | 0.031 | 좋음 | 0.025 | 좋음 | 0.3 | 좋음 | 0.003 |
1238 | 2021-03-25:01 | 보통 | 42.0 | 좋음 | 13.0 | 좋음 | 0.022 | 보통 | 0.037 | 좋음 | 0.4 | 좋음 | 0.003 |
1239 rows × 13 columns
df['date'].apply(date_ft)
0 2021-05-15 15:00:00 1 2021-05-15 14:00:00 2 2021-05-15 13:00:00 3 2021-05-15 12:00:00 4 2021-05-15 11:00:00 ... 1234 2021-03-25 05:00:00 1235 2021-03-25 04:00:00 1236 2021-03-25 03:00:00 1237 2021-03-25 02:00:00 1238 2021-03-25 01:00:00 Name: date, Length: 1239, dtype: datetime64[ns]
df['new_date'] = df['date'].apply(date_ft)
df
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | new_date | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-05-15 15:00:00 |
1 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 | 2021-05-15 14:00:00 |
2 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 | 2021-05-15 13:00:00 |
3 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 | 2021-05-15 12:00:00 |
4 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 | 2021-05-15 11:00:00 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
1234 | 2021-03-25:05 | 보통 | 39.0 | 보통 | 18.0 | 좋음 | 0.026 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 05:00:00 |
1235 | 2021-03-25:04 | 보통 | 34.0 | 좋음 | 15.0 | 좋음 | 0.017 | 보통 | 0.033 | 좋음 | 0.4 | 좋음 | 0.002 | 2021-03-25 04:00:00 |
1236 | 2021-03-25:03 | 보통 | 35.0 | 좋음 | 13.0 | 좋음 | 0.029 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 03:00:00 |
1237 | 2021-03-25:02 | 보통 | 35.0 | 좋음 | 13.0 | 보통 | 0.031 | 좋음 | 0.025 | 좋음 | 0.3 | 좋음 | 0.003 | 2021-03-25 02:00:00 |
1238 | 2021-03-25:01 | 보통 | 42.0 | 좋음 | 13.0 | 좋음 | 0.022 | 보통 | 0.037 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 01:00:00 |
1239 rows × 14 columns
Q77. 일자별 영어요일 이름을 dayName 컬럼에 저장하라
df['dayName'] = df['new_date'].dt.day_name()
df
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | new_date | dayName | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-05-15 15:00:00 | Saturday |
1 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 | 2021-05-15 14:00:00 | Saturday |
2 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 | 2021-05-15 13:00:00 | Saturday |
3 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 | 2021-05-15 12:00:00 | Saturday |
4 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 | 2021-05-15 11:00:00 | Saturday |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
1234 | 2021-03-25:05 | 보통 | 39.0 | 보통 | 18.0 | 좋음 | 0.026 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 05:00:00 | Thursday |
1235 | 2021-03-25:04 | 보통 | 34.0 | 좋음 | 15.0 | 좋음 | 0.017 | 보통 | 0.033 | 좋음 | 0.4 | 좋음 | 0.002 | 2021-03-25 04:00:00 | Thursday |
1236 | 2021-03-25:03 | 보통 | 35.0 | 좋음 | 13.0 | 좋음 | 0.029 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 03:00:00 | Thursday |
1237 | 2021-03-25:02 | 보통 | 35.0 | 좋음 | 13.0 | 보통 | 0.031 | 좋음 | 0.025 | 좋음 | 0.3 | 좋음 | 0.003 | 2021-03-25 02:00:00 | Thursday |
1238 | 2021-03-25:01 | 보통 | 42.0 | 좋음 | 13.0 | 좋음 | 0.022 | 보통 | 0.037 | 좋음 | 0.4 | 좋음 | 0.003 | 2021-03-25 01:00:00 | Thursday |
1239 rows × 15 columns
Q78. 일자별 각 PM10등급의 빈도수를 파악하라
df[['new_date', 'PM10등급']].groupby([df['new_date'].dt.date,'PM10등급']).size().unstack().fillna(0).astype('int')
PM10등급 | 나쁨 | 매우나쁨 | 보통 | 좋음 |
---|---|---|---|---|
new_date | ||||
2021-03-25 | 11 | 0 | 12 | 0 |
2021-03-26 | 21 | 3 | 0 | 0 |
2021-03-27 | 13 | 0 | 9 | 2 |
2021-03-28 | 0 | 0 | 2 | 22 |
2021-03-29 | 1 | 21 | 1 | 1 |
2021-03-30 | 3 | 10 | 11 | 0 |
2021-03-31 | 0 | 0 | 24 | 0 |
2021-04-01 | 0 | 0 | 24 | 0 |
2021-04-02 | 0 | 0 | 24 | 0 |
2021-04-03 | 0 | 0 | 14 | 10 |
2021-04-04 | 0 | 0 | 0 | 24 |
2021-04-05 | 0 | 0 | 1 | 23 |
2021-04-06 | 0 | 0 | 17 | 7 |
2021-04-07 | 7 | 0 | 13 | 4 |
2021-04-08 | 0 | 0 | 20 | 4 |
2021-04-09 | 0 | 0 | 22 | 2 |
2021-04-10 | 0 | 0 | 14 | 10 |
2021-04-11 | 0 | 0 | 24 | 0 |
2021-04-12 | 0 | 0 | 18 | 6 |
2021-04-13 | 0 | 0 | 0 | 24 |
2021-04-14 | 0 | 0 | 11 | 13 |
2021-04-15 | 0 | 0 | 24 | 0 |
2021-04-16 | 3 | 3 | 15 | 1 |
2021-04-17 | 10 | 3 | 11 | 0 |
2021-04-18 | 0 | 0 | 15 | 9 |
2021-04-19 | 0 | 0 | 24 | 0 |
2021-04-20 | 10 | 0 | 14 | 0 |
2021-04-21 | 12 | 0 | 12 | 0 |
2021-04-22 | 13 | 0 | 11 | 0 |
2021-04-23 | 0 | 0 | 18 | 6 |
2021-04-24 | 0 | 0 | 3 | 21 |
2021-04-25 | 0 | 0 | 7 | 17 |
2021-04-26 | 0 | 0 | 13 | 11 |
2021-04-27 | 0 | 0 | 14 | 10 |
2021-04-28 | 6 | 0 | 16 | 1 |
2021-04-29 | 11 | 0 | 13 | 0 |
2021-04-30 | 3 | 0 | 8 | 12 |
2021-05-01 | 0 | 0 | 12 | 11 |
2021-05-02 | 0 | 0 | 0 | 24 |
2021-05-03 | 0 | 0 | 21 | 3 |
2021-05-04 | 0 | 0 | 14 | 10 |
2021-05-05 | 1 | 0 | 13 | 10 |
2021-05-06 | 6 | 0 | 18 | 0 |
2021-05-07 | 2 | 11 | 11 | 0 |
2021-05-08 | 0 | 24 | 0 | 0 |
2021-05-09 | 2 | 1 | 19 | 2 |
2021-05-10 | 0 | 0 | 5 | 19 |
2021-05-11 | 0 | 0 | 1 | 23 |
2021-05-12 | 0 | 0 | 6 | 18 |
2021-05-13 | 0 | 0 | 22 | 1 |
2021-05-14 | 2 | 0 | 22 | 0 |
2021-05-15 | 8 | 0 | 8 | 0 |
Q79. 시간이 연속적으로 존재하며 결측치가 없는지 확인하라
df['new_date'].diff().dropna().unique()
<TimedeltaArray> ['-1 days +23:00:00'] Length: 1, dtype: timedelta64[ns]
Q80. 오전 10시와 오후 10시(22시)의 PM10의 평균값을 각각 구하여라
print(df.groupby(df['new_date'].dt.hour)['PM10'].mean()[10])
print(df.groupby(df['new_date'].dt.hour)['PM10'].mean()[20])
70.38461538461539 67.66666666666667
Q81. 날짜 컬럼을 index로 만들어라
df = df.set_index('new_date')
df
date | PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
new_date | |||||||||||||
2021-05-15 15:00:00 | 2021-05-15:15 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 |
2021-05-15 14:00:00 | 2021-05-15:14 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 |
2021-05-15 13:00:00 | 2021-05-15:13 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 |
2021-05-15 12:00:00 | 2021-05-15:12 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 |
2021-05-15 11:00:00 | 2021-05-15:11 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2021-03-25 05:00:00 | 2021-03-25:05 | 보통 | 39.0 | 보통 | 18.0 | 좋음 | 0.026 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 |
2021-03-25 04:00:00 | 2021-03-25:04 | 보통 | 34.0 | 좋음 | 15.0 | 좋음 | 0.017 | 보통 | 0.033 | 좋음 | 0.4 | 좋음 | 0.002 |
2021-03-25 03:00:00 | 2021-03-25:03 | 보통 | 35.0 | 좋음 | 13.0 | 좋음 | 0.029 | 좋음 | 0.025 | 좋음 | 0.4 | 좋음 | 0.003 |
2021-03-25 02:00:00 | 2021-03-25:02 | 보통 | 35.0 | 좋음 | 13.0 | 보통 | 0.031 | 좋음 | 0.025 | 좋음 | 0.3 | 좋음 | 0.003 |
2021-03-25 01:00:00 | 2021-03-25:01 | 보통 | 42.0 | 좋음 | 13.0 | 좋음 | 0.022 | 보통 | 0.037 | 좋음 | 0.4 | 좋음 | 0.003 |
1239 rows × 13 columns
df = df.drop(columns='date')
df.head()
PM10등급 | PM10 | PM2.5등급 | PM2.5 | 오존등급 | 오존 | 이산화질소등급 | 이산화질소 | 일산화탄소등급 | 일산화탄소 | 아황산가스등급 | 아황산가스 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
new_date | ||||||||||||
2021-05-15 15:00:00 | 보통 | 47.0 | 보통 | 19.0 | 좋음 | 0.017 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.003 |
2021-05-15 14:00:00 | 보통 | 43.0 | 보통 | 20.0 | 좋음 | 0.024 | 좋음 | 0.019 | 좋음 | 0.3 | 좋음 | 0.003 |
2021-05-15 13:00:00 | 보통 | 34.0 | 보통 | 24.0 | 보통 | 0.035 | 좋음 | 0.017 | 좋음 | 0.4 | 좋음 | 0.004 |
2021-05-15 12:00:00 | 보통 | 41.0 | 보통 | 27.0 | 보통 | 0.037 | 좋음 | 0.020 | 좋음 | 0.4 | 좋음 | 0.004 |
2021-05-15 11:00:00 | 보통 | 51.0 | 보통 | 34.0 | 보통 | 0.033 | 좋음 | 0.023 | 좋음 | 0.4 | 좋음 | 0.005 |
Q82. 데이터를 주단위로 뽑아서 최소,최대 평균, 표준표차를 구하여라
df.select_dtypes(exclude= 'object').resample('W').agg(['min','max','mean','std'])
PM10 | PM2.5 | 오존 | ... | 이산화질소 | 일산화탄소 | 아황산가스 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
min | max | mean | std | min | max | mean | std | min | max | ... | mean | std | min | max | mean | std | min | max | mean | std | |
new_date | |||||||||||||||||||||
2021-03-28 | 6.0 | 160.0 | 72.747368 | 43.345462 | 4.0 | 113.0 | 44.705263 | 29.551928 | 0.002 | 0.085 | ... | 0.044579 | 0.023722 | 0.3 | 1.4 | 0.611579 | 0.232408 | 0.002 | 0.006 | 0.003274 | 0.000961 |
2021-04-04 | 3.0 | 598.0 | 97.148810 | 129.911976 | 1.0 | 120.0 | 23.168675 | 22.399578 | 0.003 | 0.055 | ... | 0.027929 | 0.014978 | 0.3 | 0.9 | 0.445833 | 0.135741 | 0.002 | 0.004 | 0.002732 | 0.000541 |
2021-04-11 | 17.0 | 102.0 | 41.059524 | 16.325911 | 7.0 | 70.0 | 21.761905 | 11.479343 | 0.009 | 0.070 | ... | 0.022583 | 0.009562 | 0.3 | 0.7 | 0.389286 | 0.087573 | 0.002 | 0.004 | 0.002744 | 0.000569 |
2021-04-18 | 3.0 | 367.0 | 48.180723 | 43.254468 | 2.0 | 38.0 | 17.066265 | 7.867952 | 0.002 | 0.070 | ... | 0.023753 | 0.013553 | 0.3 | 0.6 | 0.386747 | 0.084954 | 0.002 | 0.004 | 0.002464 | 0.000579 |
2021-04-25 | 17.0 | 126.0 | 55.119048 | 26.659936 | 7.0 | 61.0 | 26.392857 | 13.094788 | 0.006 | 0.090 | ... | 0.028571 | 0.014640 | 0.3 | 0.8 | 0.457143 | 0.122142 | 0.001 | 0.011 | 0.003631 | 0.001763 |
2021-05-02 | 3.0 | 97.0 | 40.612121 | 24.813103 | 1.0 | 43.0 | 16.644578 | 8.850965 | 0.003 | 0.064 | ... | 0.020428 | 0.011676 | 0.3 | 0.6 | 0.392771 | 0.092485 | 0.001 | 0.006 | 0.002524 | 0.000768 |
2021-05-09 | 8.0 | 1024.0 | 161.660714 | 239.679148 | 3.0 | 172.0 | 34.738095 | 39.788248 | 0.002 | 0.073 | ... | 0.024187 | 0.012371 | 0.3 | 1.0 | 0.419277 | 0.103230 | 0.002 | 0.004 | 0.002771 | 0.000579 |
2021-05-16 | 16.0 | 111.0 | 40.014815 | 21.876855 | 7.0 | 76.0 | 21.577778 | 15.622633 | 0.004 | 0.123 | ... | 0.030793 | 0.009503 | 0.3 | 0.8 | 0.440741 | 0.094075 | 0.001 | 0.006 | 0.002459 | 0.001696 |
8 rows × 24 columns