pandas
📖데이터 핸들링을 위한 판다스 기초
import pandas as pd
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100, 4100, 5000, 5100],
"할인율":[0.5, 0.1, 0.2, 0.3, 0, 0, 0],
"칼로리":[10, 180, 420, 320, 20, 500, 400],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)
df['메뉴']
0 아메리카노
1 카페라떼
2 카페모카
3 바닐라라떼
4 녹차
5 초코라떼
6 바닐라콜드브루
Name: 메뉴, dtype: object
df[['가격', '할인율']]
|
가격 |
할인율 |
0 |
4100 |
0.5 |
1 |
4600 |
0.1 |
2 |
4600 |
0.2 |
3 |
5100 |
0.3 |
4 |
4100 |
0.0 |
5 |
5000 |
0.0 |
6 |
5100 |
0.0 |
📖EDA (탐색적 데이터 분석)
df = pd.read_csv('data.csv')
df.shape
(7, 4)
df.describe()
|
가격 |
할인율 |
칼로리 |
count |
7.000000 |
7.000000 |
7.000000 |
mean |
4657.142857 |
0.157143 |
264.285714 |
std |
435.343324 |
0.190238 |
196.965068 |
min |
4100.000000 |
0.000000 |
10.000000 |
25% |
4350.000000 |
0.000000 |
100.000000 |
50% |
4600.000000 |
0.100000 |
320.000000 |
75% |
5050.000000 |
0.250000 |
410.000000 |
max |
5100.000000 |
0.500000 |
500.000000 |
df.describe(include='O')
|
메뉴 |
count |
7 |
unique |
7 |
top |
녹차 |
freq |
1 |
df.corr()
|
가격 |
할인율 |
칼로리 |
가격 |
1.000000 |
-0.327738 |
0.853837 |
할인율 |
-0.327738 |
1.000000 |
-0.390151 |
칼로리 |
0.853837 |
-0.390151 |
1.000000 |
car = {
"car":['Sedan','SUV','Sedan','SUV','SUV','SUV','Sedan','Sedan','Sedan','Sedan','Sedan'],
"size":['S','M','S','S','M','M','L','S','S', 'M','S']
}
car = pd.DataFrame(car)
car.head(3)
|
car |
size |
0 |
Sedan |
S |
1 |
SUV |
M |
2 |
Sedan |
S |
car.nunique()
car 2
size 3
dtype: int64
car['car'].unique()
array(['Sedan', 'SUV'], dtype=object)
car['size'].unique()
array(['S', 'M', 'L'], dtype=object)
car['car'].value_counts()
Sedan 7
SUV 4
Name: car, dtype: int64
car['size'].value_counts()
S 6
M 4
L 1
Name: size, dtype: int64
📖자료형 변환
data = {
"메뉴":['아메리카노', '카페라떼', '카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":['0.5', '0.1', '0.2', '0.3'],
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 메뉴 4 non-null object
1 가격 4 non-null int64
2 할인율 4 non-null object
3 칼로리 4 non-null int64
dtypes: int64(2), object(2)
memory usage: 256.0+ bytes
df['할인율'] = df['할인율'].astype('float')
df['new'] = 0
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
new |
0 |
아메리카노 |
4100 |
0.5 |
10 |
0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
0 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
0 |
df['할인가'] = df['가격'] * (1-df['할인율'])
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
new |
할인가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
0 |
2050.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
0 |
4140.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
0 |
3680.0 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
0 |
3570.0 |
import numpy as np
df['원두'] = np.nan
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
new |
할인가 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
0 |
2050.0 |
NaN |
1 |
카페라떼 |
4600 |
0.1 |
180 |
0 |
4140.0 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
0 |
3680.0 |
NaN |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
0 |
3570.0 |
NaN |
📖데이터 삭제
컬럼 삭제
df = df.drop('new', 1)
df.head(2)
|
메뉴 |
가격 |
할인율 |
칼로리 |
할인가 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
2050.0 |
NaN |
1 |
카페라떼 |
4600 |
0.1 |
180 |
4140.0 |
NaN |
행 삭제
df = df.drop(1, axis=0)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
할인가 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
2050.0 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
3680.0 |
NaN |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
3570.0 |
NaN |
📖CSV 저장하기
df.to_csv('data2.csv', index=False)
new_df = pd.read_csv('data2.csv')
new_df.head()
|
메뉴 |
가격 |
할인율 |
칼로리 |
할인가 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
2050.0 |
NaN |
1 |
카페모카 |
4600 |
0.2 |
420 |
3680.0 |
NaN |
2 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
3570.0 |
NaN |
✍️예제
data = {
"메뉴":['아메리카노', '카페라떼', '카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":['0.5', '0.1', '0.2', '0.3'],
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
1. 이벤트가 컬럼 만들기
df['이벤트가'] = df['가격'] * 0.5
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
2050.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
2300.0 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
2550.0 |
2. 할인가 컬럼 만들기
df['할인율'] = df['할인율'].astype('float')
df['할인가'] = df['가격'] * (1-df['할인율'])
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
이벤트가 |
할인가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
2050.0 |
2050.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2300.0 |
4140.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
2300.0 |
3680.0 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
2550.0 |
3570.0 |
3. 컬럼 삭제
df = df.drop('칼로리', axis=1)
df
|
메뉴 |
가격 |
할인율 |
이벤트가 |
할인가 |
0 |
아메리카노 |
4100 |
0.5 |
2050.0 |
2050.0 |
1 |
카페라떼 |
4600 |
0.1 |
2300.0 |
4140.0 |
2 |
카페모카 |
4600 |
0.2 |
2300.0 |
3680.0 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
2550.0 |
3570.0 |
📖인덱싱/슬라이싱
import pandas as pd
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100, 4100, 5000, 5100],
"할인율":[0.5, 0.1, 0.2, 0.3, 0, 0, 0],
"칼로리":[10, 180, 420, 320, 20, 500, 400],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)
df = pd.read_csv('data.csv')
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
4 |
녹차 |
4100 |
0.0 |
20 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
loc
- 인덱스 명
- 인덱스 명(범위), 컬럼 명(범위)
df.loc[0]
메뉴 아메리카노
가격 4100
할인율 0.5
칼로리 10
Name: 0, dtype: object
df.loc[:, "가격"]
0 4100
1 4600
2 4600
3 5100
4 4100
5 5000
6 5100
Name: 가격, dtype: int64
df.loc[1, "가격"]
4600
df.loc[2, '메뉴':'가격']
메뉴 카페모카
가격 4600
Name: 2, dtype: object
df.loc[1:2, '메뉴':'가격']
|
메뉴 |
가격 |
1 |
카페라떼 |
4600 |
2 |
카페모카 |
4600 |
iloc
- 인덱스 번호
- 인덱스 번호(범위), 컬럼 번호(범위)
df.head()
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
4 |
녹차 |
4100 |
0.0 |
20 |
df.iloc[0]
메뉴 아메리카노
가격 4100
할인율 0.5
칼로리 10
Name: 0, dtype: object
df.iloc[:, 1]
0 4100
1 4600
2 4600
3 5100
4 4100
5 5000
6 5100
Name: 가격, dtype: int64
df.iloc[2, 0:2]
메뉴 카페모카
가격 4600
Name: 2, dtype: object
df.iloc[1:3]
|
메뉴 |
가격 |
할인율 |
칼로리 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
📖데이터 추가
df.loc[0, "원두"] = '콜롬비아'
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
df.loc['시즌'] = ['크리스마스라떼', 6000, 0, 500, '한국']
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
시즌 |
크리스마스라떼 |
6000 |
0.0 |
500 |
한국 |
df.loc[7] = {'메뉴':'에소프레소', '가격':2000, '칼로리':10}
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
시즌 |
크리스마스라떼 |
6000 |
0.0 |
500 |
한국 |
7 |
에소프레소 |
2000 |
NaN |
10 |
NaN |
📖SORT
df.sort_index(ascending=False)
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
7 |
에소프레소 |
2000 |
NaN |
10 |
NaN |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
df.sort_values('메뉴',ascending=False)
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
7 |
에소프레소 |
2000 |
NaN |
10 |
NaN |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
df = df.sort_values(['가격', '메뉴'],ascending=[False, True])
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
4 |
녹차 |
4100 |
0.0 |
20 |
NaN |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
7 |
에소프레소 |
2000 |
NaN |
10 |
NaN |
df.reset_index(drop=True)
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
0 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
1 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
2 |
초코라떼 |
5000 |
0.0 |
500 |
NaN |
3 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
4 |
카페모카 |
4600 |
0.2 |
420 |
NaN |
5 |
녹차 |
4100 |
0.0 |
20 |
NaN |
6 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
7 |
에소프레소 |
2000 |
NaN |
10 |
NaN |
✍️예제
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":[0.5, 0.1, 0.2, 0.3],
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df.head()
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
3 |
바닐라콜드브루 |
5100 |
0.3 |
320 |
1. 앞에서부터 3개의 데이터만 선택하세요
df.loc[:2]
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
df.iloc[:3]
|
메뉴 |
가격 |
할인율 |
칼로리 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
2. 주어진 데이터(df)에서 아래 값을 loc와 iloc을 활용해 데이터 프레임으로 각각 출력하시오
- 카페라떼 4600 0.1
- 카페모카 4600 0.2
df.loc[1:2, :'할인율']
|
메뉴 |
가격 |
할인율 |
1 |
카페라떼 |
4600 |
0.1 |
2 |
카페모카 |
4600 |
0.2 |
df.iloc[1:3, :3]
|
메뉴 |
가격 |
할인율 |
1 |
카페라떼 |
4600 |
0.1 |
2 |
카페모카 |
4600 |
0.2 |
3. 메뉴 중 가격이 가장 비싼 순으로 정렬해 상위 3개 값을 구하시오
df = df.sort_values('가격', ascending=False)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
2 |
카페모카 |
4600 |
0.2 |
420 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
4 |
녹차 |
4100 |
0.0 |
20 |
df.iloc[:3]
|
메뉴 |
가격 |
할인율 |
칼로리 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
자주 활용되는 판다스 예제
import pandas as pd
import numpy as np
data = {
"메뉴":['아메리카노','카페라떼','카페모카', '바닐라라떼', '녹차', '초코라떼', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100, 4100, 5000, 5100],
"할인율":[0.5, 0.1, 0.2, 0.3, 0, 0, 0],
"칼로리":[10, 180, 420, 320, 20, 500, 400],
"원두":['콜롬비아', np.NaN, '과테말라', np.NaN, '한국', '콜롬비아', np.NaN],
"이벤트가":[1900, 2300, np.NaN, 2600, np.NaN, 3000, 3200],
}
data = pd.DataFrame(data)
data.to_csv('data.csv', index=False)
df = pd.read_csv("data.csv")
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
📖조건필터
df[df['할인율'] > 0.2]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
cond1 = df['할인율'] >= 0.2
cond2 = df['칼로리'] < 400
df[cond1 & cond2]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
cond1 = df['할인율'] >= 0.2
cond2 = df['칼로리'] < 400
df[cond1 | cond2]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
cond = df['원두'] == "콜롬비아"
df[cond]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
cond1 = df['원두'] == "콜롬비아"
cond2 = df['가격'] < 4500
df[cond1 & cond2]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
📖결측치
df.isnull().sum()
메뉴 0
가격 0
할인율 0
칼로리 0
원두 3
이벤트가 2
dtype: int64
df['원두'] = df['원두'].fillna('코스타리카')
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
코스타리카 |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
df['이벤트가'] = df['이벤트가'].fillna(1900)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
코스타리카 |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
📖값 변경
df.replace('아메리카노', '룽고').replace('녹차','그린티')
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
룽고 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
코스타리카 |
2600.0 |
4 |
그린티 |
4100 |
0.0 |
20 |
한국 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
d = {'아메리카노':'룽고', '녹차':'그린티'}
df = df.replace(d)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
룽고 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
코스타리카 |
2600.0 |
4 |
그린티 |
4100 |
0.0 |
20 |
한국 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
df = df.replace(1900, 1500)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
룽고 |
4100 |
0.5 |
10 |
콜롬비아 |
1500.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1500.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
코스타리카 |
2600.0 |
4 |
그린티 |
4100 |
0.0 |
20 |
한국 |
1500.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
df.loc[3, "원두"] = "과테말라"
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
룽고 |
4100 |
0.5 |
10 |
콜롬비아 |
1500.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1500.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
과테말라 |
2600.0 |
4 |
그린티 |
4100 |
0.0 |
20 |
한국 |
1500.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
3200.0 |
df.loc[:, '이벤트가'] = 1000
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
룽고 |
4100 |
0.5 |
10 |
콜롬비아 |
1000 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
코스타리카 |
1000 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1000 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
과테말라 |
1000 |
4 |
그린티 |
4100 |
0.0 |
20 |
한국 |
1000 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
1000 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
코스타리카 |
1000 |
📖내장함수
df = pd.read_csv('data.csv')
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
df.count()
메뉴 7
가격 7
할인율 7
칼로리 7
원두 4
이벤트가 5
dtype: int64
df.count(axis=1)
0 6
1 5
2 5
3 5
4 5
5 6
6 5
dtype: int64
len(df)
df.shape[0]
7
df['가격'].max()
5100
df['가격'].mean()
4657.142857142857
df['가격'].median()
4600.0
df['가격'].sum()
32600
df['가격'].std()
435.3433237386437
df['가격'].var()
189523.8095238095
df['가격'].skew()
-0.3739900475641664
df['가격'].kurt()
-1.7170778515694067
df['가격'].describe()
count 7.000000
mean 4657.142857
std 435.343324
min 4100.000000
25% 4350.000000
50% 4600.000000
75% 5050.000000
max 5100.000000
Name: 가격, dtype: float64
df['가격'].quantile(.25)
4350.0
df['가격'].quantile(.75)
5050.0
cond = df['가격'].quantile(.25) > df['가격']
df[cond]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
cond = df['가격'].quantile(.75) < df['가격']
df[cond]
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
df['원두'].mode()[0]
'콜롬비아'
심화(apply함수)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
def cal(x):
if x >= 300:
return "No"
else:
return "Yes"
df['칼로리'].apply(cal)
0 Yes
1 Yes
2 No
3 No
4 Yes
5 No
6 No
Name: 칼로리, dtype: object
df['먹어도될까요'] = df['칼로리'].apply(cal)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
먹어도될까요 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
Yes |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
Yes |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
NaN |
No |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
No |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
NaN |
Yes |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
No |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
No |
📖그룹핑
df.groupby('원두').mean()
|
가격 |
할인율 |
칼로리 |
이벤트가 |
원두 |
|
|
|
|
과테말라 |
4600 |
0.20 |
420 |
NaN |
콜롬비아 |
4550 |
0.25 |
255 |
2450.0 |
한국 |
4100 |
0.00 |
20 |
NaN |
df.groupby(['원두', '할인율']).mean()
|
|
가격 |
칼로리 |
이벤트가 |
원두 |
할인율 |
|
|
|
과테말라 |
0.2 |
4600 |
420 |
NaN |
콜롬비아 |
0.0 |
5000 |
500 |
3000.0 |
0.5 |
4100 |
10 |
1900.0 |
한국 |
0.0 |
4100 |
20 |
NaN |
df.groupby(['원두', '할인율'])['가격'].mean()
원두 할인율
과테말라 0.2 4600
콜롬비아 0.0 5000
0.5 4100
한국 0.0 4100
Name: 가격, dtype: int64
pd.DataFrame(df.groupby(['원두', '할인율'])['가격'].mean())
|
|
가격 |
원두 |
할인율 |
|
과테말라 |
0.2 |
4600 |
콜롬비아 |
0.0 |
5000 |
0.5 |
4100 |
한국 |
0.0 |
4100 |
df.groupby(['원두', '할인율']).mean().reset_index()
|
원두 |
할인율 |
가격 |
칼로리 |
이벤트가 |
0 |
과테말라 |
0.2 |
4600 |
420 |
NaN |
1 |
콜롬비아 |
0.0 |
5000 |
500 |
3000.0 |
2 |
콜롬비아 |
0.5 |
4100 |
10 |
1900.0 |
3 |
한국 |
0.0 |
4100 |
20 |
NaN |
1. '이벤트가' 컬럼 결측치는 이벤트가격 데이터 중 최소값으로 결측치 채움
min_price = df['이벤트가'].min()
df['이벤트가'] = df['이벤트가'].fillna(min_price)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
NaN |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
NaN |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
NaN |
3200.0 |
2. '원두' 컬럼 결측치는 원두 데이터 중 최빈값으로 결측치 채움
f = df['원두'].mode()[0]
df['원두'] = df['원두'].fillna(f)
df
|
메뉴 |
가격 |
할인율 |
칼로리 |
원두 |
이벤트가 |
0 |
아메리카노 |
4100 |
0.5 |
10 |
콜롬비아 |
1900.0 |
1 |
카페라떼 |
4600 |
0.1 |
180 |
콜롬비아 |
2300.0 |
2 |
카페모카 |
4600 |
0.2 |
420 |
과테말라 |
1900.0 |
3 |
바닐라라떼 |
5100 |
0.3 |
320 |
콜롬비아 |
2600.0 |
4 |
녹차 |
4100 |
0.0 |
20 |
한국 |
1900.0 |
5 |
초코라떼 |
5000 |
0.0 |
500 |
콜롬비아 |
3000.0 |
6 |
바닐라콜드브루 |
5100 |
0.0 |
400 |
콜롬비아 |
3200.0 |
3. 가격이 5000 이상인 데이터의 수를 구하시오
cond = df['가격'] >= 5000
len(df[cond])
3