pandas 잊기 쉬운 기능 모음
2021. 1. 26. 22:01ㆍPython
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 |