ํน๊ฐ datamanim ๋์ ๊ณ ์ง์ ์ธ ์ ์ฒ๋ฆฌ์ฅ์ ๋ฅผ ์ด๋์ ๋ ํด๊ฒฐํ ์ ์์๋ค. ๊ฒฝ๋ฐฐ.
https://www.datamanim.com/dataset/99_pandas/pandasMain.html
# cp949 / euc-kr ์ด์ฉํ์ฌ UnicodeDecodeError ํด๊ฒฐ
import pandas as pd
df = pd.read_csv("web์ฃผ์ or ํ์ผ๊ฒฝ๋ก",encoding='cp949' or 'euc-kr')
# df.info()๋ก ๊ฐ ํ์ type์ด ๋ฌด์์ธ์ง ์ฐ์ ํ์ธํ ์ ์๋ค.
# ๋ฒ์ฃผํ์ type = object
df_num = df.select_dtypes(include=['int','float'])
df_num.columns
df.isnull().sum(axis=0)
# axis=1์ด๋ผ๋ฉด ํ ๊ธฐ์ค sum. ๊ธฐ๋ณธ๊ฐ์ axis=0์ผ๋ก ์ค์ ๋์ด ์๋ค.
# ์ผ์ผ์ด ์์นํ ๋ณ์ column ์ด๋ ค์ฃผ์ง ์์๋ ํ๋ฒ์ ๊ฐ๋ฅ
df.describe()
df["ํ๊ท ์๋"].quantile(0.75) - df["ํ๊ท ์๋"].quantile(0.25)
len(df["์๋ฉด๋๋ช
"].unique())
# ์์ฒ๋ผ ๋ณต์กํ๊ธฐ ํ ์๋ ์์ง๋ง, nunique๋ฅผ ์ด์ฉํ๋ฉด ๋ ๋น ๋ฅด๋ค
df["์๋ฉด๋๋ช
"].nunique()
# df[์กฐ๊ฑด] ์ด๋ผ๊ณ ์ฐ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ ๋ค๋ง ๋ฐ๋ก ๋ฝ์์ DataFrame ๋ง๋ค ์ ์๋ค.
df[df["quantity"] == 3).head()
df.loc[:,["quantity","item_name"]]
df["new_price"] = df["item_price"].str[1:].astype('float')
df_c = df.loc[(df["item_name"]== 'Chicken Salad Bowl') & (df["new_price"]<=9)]
# .str.contains ๋ฉ์๋๋ก ํน์ ๋ฌธ๊ตฌ ํฌํจํ๋ ๋ฐ์ดํฐ ์ถ๋ ฅํจ
df_chips = df.loc[df["item_name"].str.contains('Chips')]
incomedic = {
'Unknown' : 'N',
'Less than $40K' : 'a',
'$40K - $60K' : 'b',
'$60K - $80K' : 'c',
'$80K - $120K' : 'd',
'$120K +' : 'e'}
df["new_income"] = df.Income_Category.map(lambda x : incomedic[x])
df.head()
def changeCategory(x):
if x =='Unknown':
return 'N'
elif x =='Less than $40K':
return 'a'
elif x =='$40K - $60K':
return 'b'
elif x =='$60K - $80K':
return 'c'
elif x =='$80K - $120K':
return 'd'
elif x =='$120K +' :
return 'e'
df['newIncome'] =df.Income_Category.apply(changeCategory)
df["Age_State"] = df.Customer_Age.map(lambda x : (x//10) * 10)
df.Age_State.value_counts().sort_index()
df['newEduLevel'] = df.Education_Level.map(lambda x : 1 if 'Graduate' in x else 0)
Ans = df['newEduLevel'].value_counts()
# ์ฌ๊ธฐ์๋ x๊ฐ data frame์ผ๋ก ์ธ์๋๋๋ก ํจ. apply ํ ๋๋ df๋ ๋ฒจ์์ ์ ์ฉํ๋ค.
def check(x):
if x.Marital_Status =='Married' and x.Card_Category =='Platinum':
return 1
else:
return 0
df['newState'] = df.apply(check,axis=1)
# column ๋ฐฉํฅ ๊ณ์ฐ์ด๋ฏ๋ก axis = 1
df['newState'].value_counts()
def change(x):
if x["Gender"] == 'M':
return 'Male'
elif x["Gender"] == 'F':
return 'Female'
df["Gender"] = df.apply(change,axis=1)
df["Gender"].value_counts()
65-0. ๊ฐ Column์ ๋ฐ์ดํฐ ํ์ ํ์ ํ๊ธฐ
df=pd.read_csv("ํ์ผ ๊ฒฝ๋ก ํน์ Url.csv")
df.info()
df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy)
ํน์,
df.Yr_Mo_Dy = df.Yr_Mo_Dy.astype('datetime64')
# datetime ํ์์ผ๋ก ๋ง์ถ ์ ๋ณด๋ค์ dt.year dt.month ๋ฐ์๋ก ํธ์ถ์ด ๊ฐ๋ฅํ๋ค!
df.Yr_Mo_Dy.dt.year.unique()
df2.drop('Indicator',axis = 1)
df2["First Tooltip"] = df2["First Tooltip"].map(lambda x : float(x.split("[")[0]))
91-0. DataFrame ๋ถ๋ฌ์ฌ ๋ index column์ด ์๋์ ์ผ๋ก ์๊ธฐ๊ฒ ๋๋๋ฐ(0,1,2...), index_col = 0 ์ผ๋ก ๋ณด์ ๊ฐ๋ฅ
df=pd.read_csv("ํ์ผ ๊ฒฝ๋ก ํน์ Url.csv",index_col=0)
# column์ ๊ฐ์ ๊ฐ์ ๊ฒฝ์ฐ ๋ค์ ์ด์ด์ ๋ถ์ด๋ ์์
pd.concat([df1,df2])
92-3. df3๊ณผ df4 ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ํฉ์ณ๋ผ. concat()
case 1. join = 'inner'
# ๋ DataFrame์ row์ column์ค ๊ฒน์น๋ column์ ๋ํด์๋ง ํฉ์นจ
pd.concat([df3,df4],join='inner')
case 2. join = 'outer'
# ๋ DataFrame์ row์ column ๋ชจ๋ ์ด๋ ค์ ๊ฒฐ์ธก์น๋ NaN์ผ๋ก ์ฑ์
pd.concat([df3,df4],join='outer').fillna(0)
94-95. df5์ df6 ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฐ์ดํฐ ํ๋ ์์ผ๋ก ํฉ์ณ๋ผ. merge()
# concat๊ณผ์ ์ฐจ์ด๋ 'ํน์ ๊ณตํต์ด' ๊ธฐ์ค์ผ๋ก ํฉ์น๋ ค๊ณ ํ ๋
Algeria์ปฌ๋ผ์ key๋ก ํ๊ณ ๋ ๋ฐ์ดํฐ ๋ชจ๋ ํฌํจํ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํ๋ผ
pd.merge(df5,df6,on='Algeria',how='inner')