판다스 기초 & 예제

sjm0321·2022년 11월 2일
1

빅분기 실기

목록 보기
1/1

pandas

📖데이터 핸들링을 위한 판다스 기초

# 학습 전 반드시 실행: 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)
# 시리즈 선택 (가격)
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 (탐색적 데이터 분석)

# 데이터 불러오기 (에러가 뜬다면 가장 첫번째 셀, csv 파일을 생성하는 코드 실행)
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
# 기초 통계 (object)
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['car'].value_counts()
Sedan    7
SUV      4
Name: car, dtype: int64
# 항목별 개수 (size)
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
# 자료형 변환 / astype /  object -> float
df['할인율'] = df['할인율'].astype('float')
# 새로운 컬럼 추가 (값은 0)
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
# 결측값으로 추가, 원두 컬럼을 만들고 결측값(NaN)으로 대입
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

📖데이터 삭제

컬럼 삭제

# 데이터 삭제
# axis=1:열방향(컬럼) / axis=0:행방향
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 저장하기

# csv로 저장하기
df.to_csv('data2.csv', index=False) #INDEX-FALSE 해야 저장 시 추가로 인덱스가 더 생성되지 않음.
# df.to_csv('data2.csv')
# csv 불러오기
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. 이벤트가 컬럼 만들기

  • 원 가격의 50% 할인을 적용한 이벤트가격
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

📖인덱싱/슬라이싱

# 학습 전 실행: 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)
# 데이터 불러오기
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

# 인덱스 기준 (기본값 ascending=True)
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 콜롬비아
# 값 기준 (기본값 ascending=True)
# 메뉴 기준 정렬
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
# 인덱스 새로 적용 drop=True
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
# 아래 값만 출력하시오 
# 카페라떼	4600	0.1	
# 카페모카	4600	0.2	
# loc
df.loc[1:2, :'할인율']
메뉴 가격 할인율
1 카페라떼 4600 0.1
2 카페모카 4600 0.2
# iloc
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

자주 활용되는 판다스 예제

# 학습 전 실행: csv파일 (data.csv) 생성 
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

📖조건필터

# 1개 조건
# 할인율 > 0.2
# cond = df['할인율'] > 0.2
# df[cond]
df[df['할인율'] > 0.2]
메뉴 가격 할인율 칼로리 원두 이벤트가
0 아메리카노 4100 0.5 10 콜롬비아 1900.0
3 바닐라라떼 5100 0.3 320 NaN 2600.0
# 2개 이상 일때 (AND)
# 할인율 >= 0.2
# 칼로리 < 400
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
# 2개 이상 일때 (OR)
# 할인율 >= 0.2
# 칼로리 < 400
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
# 문자열 1개 조건
# 원두 == 콜롬비아
cond = df['원두'] == "콜롬비아"
df[cond]
메뉴 가격 할인율 칼로리 원두 이벤트가
0 아메리카노 4100 0.5 10 콜롬비아 1900.0
5 초코라떼 5000 0.0 500 콜롬비아 3000.0
# 문자열과 숫자 조건 (AND)
# 원두 == 콜롬비아
# 가격 < 4500
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
# '이벤트가'컬럼 결측치는 1900으로 결측치 채움
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
# 숫자 변경 : 1900 -> 1500
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
# loc로 값 변경하기
# 바닐라라떼 원두 -> 과테말라로 변경
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
# 이벤트가 전체 1000으로 변경
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
# 카운트 (컬럼) #기본값 axis=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
 # [Tip] 데이터 수 len, shape
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
# 왜도 skewness
df['가격'].skew()
-0.3739900475641664
# 첨도 kurtosis
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
# 하위 25% 값
df['가격'].quantile(.25)
4350.0
# 상위 25% 값
df['가격'].quantile(.75)
5050.0
# 하위 25% 데이터
cond = df['가격'].quantile(.25) > df['가격']
df[cond]
메뉴 가격 할인율 칼로리 원두 이벤트가
0 아메리카노 4100 0.5 10 콜롬비아 1900.0
4 녹차 4100 0.0 20 한국 NaN
# 상위 25% 데이터
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
# apply 예시
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
# apply 적용해서 새로운 컬럼 생성 (칼로리 컬럼 활용)
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
# 1개 인덱스 형태로 리셋
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
profile
데이터분석 스터디노트🧐✍️

0개의 댓글