pandas 잊기 쉬운 기능 모음

2021. 1. 26. 22:01Python

1. 한 열만 지우기

X_titanic_df = titanic_df.drop('Survived', axis=1)

2. DataFrame의 맨 마지막 열만 분리

y = diabets_data.iloc[:, -1]
# 기초 통계 구하기
# 방법1
df[["carot", "price"]].agg(["mean", "std"])
df[["carot", "price"]].agg(["mean", "std"]).transpose() # 행 열 전환


# 방법2
df[["carot", "price"]].mean()

3. Series

pd.Series([1, 2, 3, 4])
ser = pd.Series([3, 5, 7, 9])
print("index: ", ser.index)
print("values: ", ser.values)

ser.astype("str") # 강제 형변환
ser.astype("str") + "aa"


ser.to_frame()
ser.reset_index()

4. iloc

 

5. filtering

# 1개로 필터링
df_season1 = df[df["season"] == 1]
df_season1.head(2)
print(df_season1["season"].unique())

# 2개 이상 필터링
# 2만 있고 모든 열이 다 나온다. 
df_season2 = df.loc[df["season"] == 2, ]
# df_season3 = df.loc[df["season"] == 2, :] # 이것도 가능
print("2개이상 unique ", df_season2["season"].unique())
df_season2.head()

6. 결측치

. 정렬하면 결측치는 항상 맨 뒤로 간다.

import numpy as np
print(df_iris.keys())
df_sub["petal length"] = df_iris["petal length (cm)"].replace(1.4, np.nan)
df_sub.loc[:, "Petal.Length"] = df_iris["petal length (cm)"].replace(1.4, np.nan)
df_sub.head()

# 결측치
df_mis.dropna()
df_mis.dropna(how = "any") # 하나라도 결측치가 있으면
df_mis.dropna(how = "all") # 모두 다 결측치라면 

df_mis[(df_mis["Sepal.Width"].notnull()) & (df_mis["Sepal.Length"] >= 5)]

# 상위 1프로만 뽑는다.
df_sub = df.loc[df["count"] >= df["count"].quantile(0.99), :]
df_sub.head(2)

# 최대값, 최소값을 본다. 
df_sub["count"].quantile([0, 1])

7. 정렬 & index

df_sub = df.iloc[:6, 9:12]
df_sub.sort_values(by=["casual", "count"], ascending=[True, False]) # 여러 기준으로 정렬


# index reset하고 생긴 index 열 제외하고 보기
df_sub_ordered = df_sub.sort_values(by=["casual", "count"], ascending=[True, False])
df_sub_ordered.reset_index().iloc[:, 1:]

# 아래 처럼도 할 수 있다. 
df_sub_ordered.reset_index(drop = True)

# set_index
# index 지정 
bike = pd.read_csv("train.csv")
bike2 = bike[["season", "holiday", "temp"]]
# bike2 = bike.loc[:, ["season", "holiday", "temp"]] 이것도 가능
bike2 = bike2.set_index(["season", "holiday"])
bike2.head(2)

8. 병합

import pandas as pd
df = pd.read_csv("train.csv")
df1 = df.head(2)
df2 = df.tail(2)
pd.concat([df1, df2]) # 밑으로 붙는다. 

pd.concat([df1, df2], axis = 1) # 옆으로 붙는다. 단, index가 다른걸 NaN으로 붙는다.

pd.concat([df1, df2.reset_index(drop = True)], axis=1) 
# 옆으로 붙는다. 만약 df1 이 0, 1 index여서 붙은거지 다른 idex였으면 안붙음

# 아래처럼 하면 옆으로 붙는다. 
# 인덱스 일치시킨다.
pd.concat([df1.reset_index(drop=True), df2.reset_index(drop=True)], axis=1)
# join
# 기본 join (하지만 주의해야한다.)
# why? join은 index를 기준으로 정렬한다.
# index는 같지만 다른 값이면 이상하게 join 될 수 있다.
df_list.join(df_room, how = "inner") # inner join
df_list.join(df_room, how = "left") # left join

# merge 
# 값을 기준으로 합친다면 merge를 사용한다. 
df_list.merge(df_room, left_on="member", right_on="name",how="left") #left join

# 2개 이상
rge(df_room, left_on=["member", "value"], right_on=["name", "value"],how="left") #left join

9. 표본 추출 / 가변수

가변수 : 값이 0 또는 1로만 구성된 이진 변수 

표시자 / 가변수 / 더미변수(dummy variable)로 불려진다. 

# Sample 만들기
bike_sam1 = bike.sample(n = 5)
len(bike_sam1)
bike_sam2 = bike.sample(frac = 0.2)
len(bike_sam2)

 

import numpy as np
np.where(np.array([1, 3, 5]) >= 3, 1, 0)  # 조건 / true / false

(np.array([1, 3, 5]) >= 3) * 1  # 이 방법도 가능하다
(np.array([1, 3, 5]) >= 3) + 1   

np.array([1, 3, 5]) >= 3

np.where(np.array([1, 3, 5]) >= 3, "합격", "탈락")  # 조건 / true / false
# Sample 만들기
bike["season_4"] = (bike["season"] == 4) + 0
pd.crosstab(bike["season"], bike["season_4"]) # 다음처럼 확인한다.

# dummy 만들기
bike_dum = pd.get_dummies(bike, columns=["season"])
bike_dum.head()

bike_dum = pd.get_dummies(bike, columns=["season"], drop_first=True)
bike_dum.head(2)

상관계수

# 상관계수
#방법 1
from scipy.stats.stats import pearsonr
stat, p = pearsonr(df["A"], df["b"])

#방법 2
df.corr()

# 독립성 검정: 두 명목형 변수에 대해 수행
from scipy.stats import chi2_contingency
chi2_contingency(pd.crosstab(df["a"], df["b"]),
				 correction=False)

 

10. 대응표본 t-검정

from scipy.stats import ttest_rel
stat, p = ttest_rel(usage_gu_total["distance"],
                    usage_gu_total["dist"])
round(abs(stat), 4

 

11. 열 이름 바꾸기 

abc.rename(colums = {"열이름" : "바꾸는 이름"})

 

12. 정렬 : value_counts()

 

13. 시계열 분석

: ewm은 import 하는거 없다. 

# 지수 가중이동 평균 평활법
id207["EWMA"] = id207["count"].ewm(min_periods = 3, alpha = 0.9).mean()
# 이동 평균법
import pandas as pd
df = pd.read_csv("bike.csv")
df["casual"].rolling(window = 24).mean

# 가중 이동 평균법
import numpy as np
import pandas as pd
np.random.seed(123)
df = pd.DataFrame({"obs":np.arange(1, 6),
                   "value":np.random.random(size=5)})
weights = np.array([0.5, 0.3, 0.2])
df["value_wma"] = df["value"].rolling(window = 3).apply(lambda x: sum(x*weights))
df["value_wma"]
from statsmodels.tsa.seasonal import seasonal_decompose
dec = seasonal_decompose(aws["TA"][:100])
dec.plot()
dec.trend[:30]

 

14. 군집 분석

from sklearn.cluster import AgglomerativeClustering
model = AgglomerativeClustering(n_cluster = 5, linkage = "single").fit(gu_2017)
model.labels_

gu_2017["cluster"] = model.labels_

15. Cross Tab

tab = pd.crosstab(index = usage_2016["id_out"],
				  columns = usage_2016["hour"],
                  values = usage_2016["distance"],
                  aggfunc = "sum").fillna(0)

16. Kmeans Clustering

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 3, random_state = 1234).fit(tab)
kmeans.labels_

17. 분산분석

import pandas as pd
from scipy.stats import f_oneway
from statsmodels.formula.api import ols
from statsmodels.stats import anova_lm

# 분산분석 : F분포
f_oneway(df.loc[df["season"] == 1, "registered"],
         df.loc[df["season"] == 2, "registered"],
         df.loc[df["season"] == 3, "registered"],
         df.loc[df["season"] == 4, "registered"])

formula1 = "registered ~ C(season)" # 범주형인 경우
formula2 = "registered ~ season" # 연속형인 경우

model1 = ols(formula1, df).fit()
model2 = ols(formula2, df).fit()
anova_lm(model1)
anova_lm(model2)

# 일원 분산분석의 사후검정 : Tukey, Duncan, Scheffe

from statsmodels.stats.multicomp import pairwise_tukeyhsd
df = pd.read_csv("train.csv")
posthoc = pairwise_tukeyhsd(df["temp"], df["atemp"])
print(posthoc)

# 다변량의 등분산 검정 : Bartlett Test

from scipy.stats import bartlett
df = pd.read_csv("train.csv")
df.head()
stat, p = bartlett(df.loc[df["weather"] == 1, "temp"],
                   df.loc[df["weather"] == 2, "temp"],
                   df.loc[df["weather"] == 3, "temp"],
                   df.loc[df["weather"] == 4, "temp"])

'Python' 카테고리의 다른 글

점프 투 파이썬 연습문제 풀기 CH2, 3  (0) 2020.12.30
그래프 그리기 Plotly  (0) 2020.09.13
pandas3  (0) 2020.09.10
Pandas  (0) 2020.09.08
Jupyter 노트북 단축키 + 기본 설명  (0) 2020.08.31