반응형
판다스 조건문
# 연습위해 1회 실행하면 된다.
# 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')
print(df)
# 조건 필터. 1개 조건
# 할인율>0.2
print(df['할인율'] > 0.2)
# 이렇게 하면 조건에 T/F 인지가 출력된다
print(df[df['할인율'] > 0.2])
# condition을 넣어서 뽑으면 해당하는 데이터행이 출력된다
#2개 이상 조건
cond1 = df['할인율'] > 0.2
cond2 = df['칼로리'] <= 400
print(df[cond1 & cond2])
#2개 이상 조건
cond1 = df['할인율'] > 0.2
cond2 = df['칼로리'] <= 400
print(df[cond1 | cond2])
# 문자열 1개 조건
# 원두 == 콜롬비아
cond = df['원두'] == '콜롬비아'
print(df[cond])
cond1 = df['원두'] == '콜롬비아'
cond2 = df['가격'] < 4500
print(df[cond1 & cond2])
print(df.isnull())
print(df.isnull().sum())
#fillna
df['원두'] = df['원두'].fillna('코스타리카')
print(df)
df['이벤트가'] = df['이벤트가'].fillna(1900)
print(df)
#문자변경 #방법1
# df = df.replace('아메리카노','룽고').replace('녹차','그린티')
# print(df)
#문자변경 #방법2 #딕셔너리
# d = {'아메리카노':'룽고','녹차':'그린티'}
# df = df.replace(d)
df = df.replace({'아메리카노':'룽고','녹차':'그린티',1900:1500})
print(df)
#하려는걸 일단 해서 출력해보고, 원하는 값이 맞으면 대입하는 식으로 하신다고함
#값변경은 딕셔너리 스타일이 제일 편한듯함
#loc로 변경
print(df.loc[3,"원두"] ) #코스타리카
df.loc[3,"원두"] = "과테말라"
print(df.loc[3,"원두"] ) #과테말라
# loc는 대입하지 않아도 변경이 되는군
df.loc[:,'이벤트가'] = 1000
print(df)
import pandas as pd
import numpy as np
df = pd.read_csv('data.csv')
print(df)
#내장함수 살펴보기
#count (컬럼별 개수 카운트. 기본값: axis =0 )
print(df.count())
#결측값nan은 카운트에서 제외된다.
#행 기준으로 개수 카운트 하려면 axis=1로 해주면된다.
# print(df.count(axis=1))
print(len(df))
print(df.shape) #(행,열)
#최대값,최소값,평균,중앙값,합계
print(
df['가격'].max(),
df['가격'].min(),
df['가격'].mean(),
round(df['가격'].mean(),2),
df['가격'].median(),
int(df['가격'].median()),
df['가격'].sum(),
#표준편차 (2회 실기 기출) : std()
df['가격'].std(),
#분산
df['가격'].var(),
#왜도 skewness
df['가격'].skew(),
#첨도 kurtosis
df['가격'].kurt(),
sep='\n'
#print문의 sep와 end
)
# DataFrame에 count,mean,std,min,25%,50%,75%
print(df.describe())
print(df['가격'].describe())
#하위 25% 값
print(df['가격'].quantile(.25))
print(df['가격'].quantile(0.25))
#.25나 0.25나 똑같은 결과나옴.
#상위 25%값
print(df['가격'].quantile(0.75))
#하위 25% 데이터
print(df[df['가격']< df['가격'].quantile(0.25) ])
#상위 25% 데이터
print(df[df['가격'].quantile(0.75)<df['가격']])
# 원두 컬럼으로 최빈값 구하기
print(df['원두'].mode())
#Series형태로 출력된다. 그래서 인덱스값, 값으로 나온다.
print(df['원두'].mode()[0])
#그래서 딱 답만 내려면 [0] 으로 출력해야 한다.
#apply함수
def cal(x):
if x>= 300:
return "No"
else:
return "Yes"
print(df)
# apply함수도 대입해야 적용이 된다.
# df = df['칼로리'].apply(cal)
# 이렇게 하면 적용 안된다.
# df['칼로리'] = df['칼로리'].apply(cal)
# 이렇게 해야 적용 된다.
df['먹어도될까요'] = df['칼로리'].apply(cal)
print(df)
#이렇게 함수적용해서 새로운컬럼 생성하는것은
#Feature Engineering에서 많이 사용된다.
#그러면 컬럼2개에 함수적용해서 새로운 컬럼생성하는방법?
# apply 함수에는 그냥 인자 하나로 넘겨주고 그 안에서 [0], [1] 로 꺼내서 써야함
def cal2(x):
if x[0] == 4600 and x[1] == 'Yes' :
return '아메리 좋아요'
elif x[0] == 4600:
return '야호'
#apply대상에 집어넣는걸 넣으면됨
# df['새로운컬럼'] = df[['가격', '먹어도될까요']].apply(cal2,axis=0)
#이렇게 하니까 NaN만 잔뜩 들어갔음 #원하는 것이 아님
# print(df)
df['새로운컬럼'] = df[['가격', '먹어도될까요']].apply(cal2,axis=1)
print(df)
# axis: 작용방향.
# 행방향/세로방향:책을 위로 쌓아 정리하는 것
# 열방향/가로방향:책을 옆으로 꽂아 정리하는것
# axis = 0 (x,y,z)
# 1차원 에서는 열 (열)
# 2차원 에서는 행 (행,열)
# 3차원 에서는 깊이 (깊이,행,열)
#그래서 여기서 axis=1로 해야 원하는 작용이 일어났음
print("====================")
#원두별 평균
print(df.groupby('원두').mean(numeric_only=True))
#원두별, 할인율별 평균
print(df.groupby(['원두','할인율']).mean(numeric_only=True))
#원두별, 할인율별, 가격의 평균
print(df.groupby(['원두','할인율'])['가격'].mean(numeric_only=True))
# 이렇게 컬럼 하나 선택해서 평균을 구하면 리턴타입이 Series가 된다.
# 이러한 Series를 DataFrame으로 바꾸어주려면? pd.DataFrame안에 넣어주면됨.
print(
pd.DataFrame(df.groupby(['원두','할인율'])['가격'].mean(numeric_only=True)))
# 이렇게 얻은 결과값 데이터프레임은 멀티인덱스임. 여기에 loc, iloc를 사용하려면 불편한 점이 있음. #그래서 reset_index해줘야함 #그러면 예쁘게 바뀜
print(df.groupby(['원두','할인율']).mean(numeric_only=True).reset_index())
import pandas as pd
import numpy as np
data = pd.read_csv('data.csv')
df = pd.DataFrame(data)
print(df)
# 이벤트가 컬럼 결측치는 이벤트가격 데이터 중 최소값으로 결측치 채움
df['이벤트가']=df['이벤트가'].fillna(df['이벤트가'].min())
print(df)
# '원두' 컬럼 결측치는 원두 데이터 중 최빈값으로 결측치 채움
df['원두']=df['원두'].fillna(df['원두'].mode()[0])
print(df)
#가격이 5000이상인 데이터의 수
print(len(df[5000<=df['가격']]))
반응형
'IT,SW,Data,Cloud,코딩 > Python' 카테고리의 다른 글
2023년6월7일 파이썬공부 - 피쳐엔지니어링 (0) | 2023.06.07 |
---|---|
2023년6월7일 파이썬공부 - 데이터전처리 (1) | 2023.06.07 |
2023년6월6일 EDA 공부 (0) | 2023.06.06 |
2023년6월6일 머신러닝 요약 (0) | 2023.06.06 |
2023년6월5일 판다스공부 (0) | 2023.06.06 |
2023년6월5일 파이썬공부 - 퇴근후딴짓님의 인프런 강의 따라치면서 배우기 (0) | 2023.06.05 |
2023년06월03일 파이썬공부 (0) | 2023.06.03 |
2023년6월2일 파이썬공부 - 퇴근후딴짓 님의 유투브 4. 작업형2 예시문제 무작정 따라해보기 - 보면서 따라 쳐 보는 포스팅 (0) | 2023.06.03 |
댓글