실습 환경 - Google Colab
판다스 기초2¶
In [1]:
# 학습 전 반드시 실행: csv파일 (data.csv) 생성
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)
In [24]:
# 데이터 불러오기
df = pd.read_csv('data.csv')
df
Out[24]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
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[인덱스 명]
- iloc[인덱스 번호]
In [6]:
# loc[인덱스 명]
df.loc[1]
Out[6]:
메뉴 카페라떼 가격 4600 할인율 0.1 칼로리 180 Name: 1, dtype: object
In [7]:
# iloc[인덱스 번호]
df.iloc[0]
Out[7]:
메뉴 아메리카노 가격 4100 할인율 0.5 칼로리 10 Name: 0, dtype: object
In [9]:
df.index = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
df
Out[9]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
a | 아메리카노 | 4100 | 0.5 | 10 |
b | 카페라떼 | 4600 | 0.1 | 180 |
c | 카페모카 | 4600 | 0.2 | 420 |
d | 바닐라라떼 | 5100 | 0.3 | 320 |
e | 녹차 | 4100 | 0.0 | 20 |
f | 초코라떼 | 5000 | 0.0 | 500 |
g | 바닐라콜드브루 | 5100 | 0.0 | 400 |
In [14]:
df.loc['a']
Out[14]:
메뉴 아메리카노 가격 4100 할인율 0.5 칼로리 10 Name: a, dtype: object
In [11]:
df.iloc[0]
Out[11]:
메뉴 아메리카노 가격 4100 할인율 0.5 칼로리 10 Name: a, dtype: object
슬라이싱¶
- loc[인덱스 명, 컬럼 명] : 마지막 포함
- iloc[인덱스 번호, 컬럼 번호] : 마지막 -1까지 포함
In [16]:
df
Out[16]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
a | 아메리카노 | 4100 | 0.5 | 10 |
b | 카페라떼 | 4600 | 0.1 | 180 |
c | 카페모카 | 4600 | 0.2 | 420 |
d | 바닐라라떼 | 5100 | 0.3 | 320 |
e | 녹차 | 4100 | 0.0 | 20 |
f | 초코라떼 | 5000 | 0.0 | 500 |
g | 바닐라콜드브루 | 5100 | 0.0 | 400 |
In [17]:
# loc[인덱스 명, 컬럼 명]
df.loc[:, '가격']
Out[17]:
a 4100 b 4600 c 4600 d 5100 e 4100 f 5000 g 5100 Name: 가격, dtype: int64
In [18]:
df.loc['a':'c', '가격':'칼로리']
Out[18]:
가격 | 할인율 | 칼로리 | |
---|---|---|---|
a | 4100 | 0.5 | 10 |
b | 4600 | 0.1 | 180 |
c | 4600 | 0.2 | 420 |
In [19]:
# iloc[인덱스 번호, 컬럼 번호]
df.iloc[:, 1]
Out[19]:
a 4100 b 4600 c 4600 d 5100 e 4100 f 5000 g 5100 Name: 가격, dtype: int64
In [22]:
df.iloc[0:3, 1:4]
Out[22]:
가격 | 할인율 | 칼로리 | |
---|---|---|---|
a | 4100 | 0.5 | 10 |
b | 4600 | 0.1 | 180 |
c | 4600 | 0.2 | 420 |
실습¶
loc¶
- 인덱스 명
- 인덱스 명(범위), 컬럼 명(범위)
In [27]:
df
Out[27]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
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 |
In [26]:
# 인덱싱 - 행 전체
# 아메리카노
df.loc[0]
Out[26]:
메뉴 아메리카노 가격 4100 할인율 0.5 칼로리 10 Name: 0, dtype: object
In [28]:
# 슬라이싱 - 컬럼 전체
# 가격
df.loc[:, '가격']
Out[28]:
0 4100 1 4600 2 4600 3 5100 4 4100 5 5000 6 5100 Name: 가격, dtype: int64
In [29]:
# 슬라이싱
# 카페라떼 가격
df.loc[1, '가격']
Out[29]:
4600
In [35]:
# 슬라이싱
# 카페모카 메뉴와 가격
df.loc[2, '메뉴':'가격']
Out[35]:
메뉴 카페모카 가격 4600 Name: 2, dtype: object
In [36]:
# 슬라이싱
# 카페모카 메뉴와 칼로리
df.loc[2, ['메뉴', '칼로리']]
Out[36]:
메뉴 카페모카 칼로리 420 Name: 2, dtype: object
In [38]:
# 슬라이싱
# 카페라떼, 카페모카 메뉴와 가격
df.loc[1:2, '메뉴':'가격']
Out[38]:
메뉴 | 가격 | |
---|---|---|
1 | 카페라떼 | 4600 |
2 | 카페모카 | 4600 |
iloc¶
In [41]:
df
Out[41]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
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 |
In [39]:
# 인덱싱 - 행 전체
# 아메리카노
df.iloc[0]
Out[39]:
메뉴 아메리카노 가격 4100 할인율 0.5 칼로리 10 Name: 0, dtype: object
In [42]:
# 슬라이싱 - 컬럼 전체
# 가격
df.iloc[:, 1]
Out[42]:
0 4100 1 4600 2 4600 3 5100 4 4100 5 5000 6 5100 Name: 가격, dtype: int64
In [43]:
# 슬라이싱
# 카페모카 메뉴, 가격
df.iloc[2, 0:2]
Out[43]:
메뉴 카페모카 가격 4600 Name: 2, dtype: object
In [44]:
# 슬라이싱
# 카페라떼, 카페모카의 전체 데이터
df.iloc[1:3, :]
Out[44]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
데이터 추가¶
- 결측값으로 추가(NaN 대입)
- 리스트 형태로 데이터(행) 추가
- 딕셔너리 형태로 데이터(행) 추가
In [49]:
# 결측값으로 추가
# 원두 컬럼을 만들고 결측값(NaN)으로 대입
import numpy as np
df['원두'] = np.nan
df
Out[49]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 | NaN |
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 |
In [51]:
# 아메리카노의 원두는 '콜롬비아' 데이터 추가
df.loc[0, '원두'] = '콜롬비아'
df
Out[51]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
In [52]:
# 리스트 형태로 데이터(행) 추가
df.loc['시즌'] = ['크리스마스라떼', 6000, 0, 500, '한국']
df
Out[52]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 | 한국 |
In [53]:
# 딕셔너리 형태로 데이터(행) 추가
# 키 값에 매칭 시켜 데이터를 넣기 때문에 컬럼 수에 맞추지 않아도 데이터 추가 가능
df.loc[7] = {
'메뉴': '에스프레소',
'가격': 2000,
'칼로리': 10
}
df
Out[53]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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¶
- default 내림차순 ascendig=True
- 인덱스 기준
- 값 기준
- 인덱스 새로 만들기
In [58]:
df = df.drop('시즌', axis=0)
df
Out[58]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
7 | 에스프레소 | 2000 | NaN | 10 | NaN |
In [61]:
# 인덱스 기준 - default 내림차순
df.sort_index()
Out[61]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
7 | 에스프레소 | 2000 | NaN | 10 | NaN |
In [62]:
# 인덱스 기준 - 오름차순
df.sort_index(ascending=False)
Out[62]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 | 콜롬비아 |
In [67]:
# 값 기준 - 오름차순
# 가격 기준 정렬
df.sort_values('가격')
Out[67]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
7 | 에스프레소 | 2000 | NaN | 10 | NaN |
0 | 아메리카노 | 4100 | 0.5 | 10 | 콜롬비아 |
4 | 녹차 | 4100 | 0.0 | 20 | NaN |
1 | 카페라떼 | 4600 | 0.1 | 180 | NaN |
2 | 카페모카 | 4600 | 0.2 | 420 | NaN |
5 | 초코라떼 | 5000 | 0.0 | 500 | NaN |
3 | 바닐라라떼 | 5100 | 0.3 | 320 | NaN |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 | NaN |
In [69]:
# 값 기준 - 내림차순
# 가격 기준 정렬
df.sort_values('가격', ascending=False)
Out[69]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
0 | 아메리카노 | 4100 | 0.5 | 10 | 콜롬비아 |
4 | 녹차 | 4100 | 0.0 | 20 | NaN |
7 | 에스프레소 | 2000 | NaN | 10 | NaN |
In [70]:
# 값 기준 - 내림차순
# 메뉴 기준 정렬
df.sort_values('메뉴')
Out[70]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
4 | 녹차 | 4100 | 0.0 | 20 | NaN |
3 | 바닐라라떼 | 5100 | 0.3 | 320 | NaN |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 | NaN |
0 | 아메리카노 | 4100 | 0.5 | 10 | 콜롬비아 |
7 | 에스프레소 | 2000 | NaN | 10 | NaN |
5 | 초코라떼 | 5000 | 0.0 | 500 | NaN |
1 | 카페라떼 | 4600 | 0.1 | 180 | NaN |
2 | 카페모카 | 4600 | 0.2 | 420 | NaN |
In [74]:
# 기준 n개 정렬
# 가격과 메뉴 기준 정렬
# 가격 - 내림차순 , 메뉴 - 오름차순
df = df.sort_values(['가격', '메뉴'], ascending=[False, True])
df
Out[74]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
In [76]:
# 인덱스 새로 만들기
# 기존 인덱스 값 삭제 : drop = True
df.reset_index(drop=True)
Out[76]:
메뉴 | 가격 | 할인율 | 칼로리 | 원두 | |
---|---|---|---|---|---|
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 |
Quiz¶
In [93]:
# 주어진 데이터
data = {
"메뉴":['아메리카노', '카페라떼', '카페모카', '바닐라콜드브루'],
"가격":[4100, 4600, 4600, 5100],
"할인율":['0.5', '0.1', '0.2', '0.3'],
"칼로리":[10,180,420,320],
}
df = pd.DataFrame(data)
df
Out[93]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
3 | 바닐라콜드브루 | 5100 | 0.3 | 320 |
In [ ]:
# 1. 앞에서부터 3개의 데이터만 선택
In [80]:
df.loc[:2]
Out[80]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
In [94]:
df.iloc[:3]
Out[94]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
0 | 아메리카노 | 4100 | 0.5 | 10 |
1 | 카페라떼 | 4600 | 0.1 | 180 |
2 | 카페모카 | 4600 | 0.2 | 420 |
In [77]:
# 2. 주어진 데이터(df)에서 아래 값을 loc와 iloc을 활용해 데이터 프레임으로 각각 출력
# 카페라떼 4600 0.1
# 카페모카 4600 0.2
In [82]:
df.loc[1:2, '메뉴':'할인율']
Out[82]:
메뉴 | 가격 | 할인율 | |
---|---|---|---|
1 | 카페라떼 | 4600 | 0.1 |
2 | 카페모카 | 4600 | 0.2 |
In [83]:
df.iloc[1:3, 0:3]
Out[83]:
메뉴 | 가격 | 할인율 | |
---|---|---|---|
1 | 카페라떼 | 4600 | 0.1 |
2 | 카페모카 | 4600 | 0.2 |
In [ ]:
# 3. 메뉴 중 가격이 가장 비싼 순으로 정렬해 상위 3개 값 출력
In [97]:
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],
}
df = pd.DataFrame(data)
In [98]:
df = df.sort_values('가격', ascending=False)
df
Out[98]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
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 |
In [99]:
df.iloc[:3]
Out[99]:
메뉴 | 가격 | 할인율 | 칼로리 | |
---|---|---|---|---|
3 | 바닐라라떼 | 5100 | 0.3 | 320 |
6 | 바닐라콜드브루 | 5100 | 0.0 | 400 |
5 | 초코라떼 | 5000 | 0.0 | 500 |
참고
[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3) | 퇴근후딴짓 - 인프런
퇴근후딴짓 | 비전공자, 입문자가 빅데이터 분석기사 실기를 빠르게 취득할 수 있도록 안내해드려요! 꼭 필요한 파이썬, 판다스, 머신러닝을 다루고 있어요!, ❤️공지❤️ 7회 기출 유형 업데이
www.inflearn.com
'자격증 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형1 - 시계열 데이터 2 (0) | 2024.06.10 |
---|---|
[빅데이터분석기사] 작업형1 - 시계열 데이터 1 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형1 - 판다스 기초 3 (0) | 2024.06.10 |
[빅데이터분석기사] 작업형 1 - 판다스 기초 1 (0) | 2024.06.10 |
[빅데이터분석기사/실기] 01. 데이터 전처리 1 (2) | 2023.11.26 |