-
PandasNAVER AI TECH 2023. 3. 9. 18:04
From BoostCourse AI Tech TEMLAB director 최성철: PythonDataAnalysisLibrary - Pandas
판다스 강의를 보고 나서 자신 있게 실습 문제를 풀려고 했지만 복습이 필요하다는 것을 깨달았다. 하하.
가장 먼저는 Series와 DataFrame을 다룰 줄 알아야 한다.
class pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)
흥미롭게도 Series와 DataFrame 모두 dict type을 사용 가능하다.
예를 들어, 다음과 같이 df를 생성할 수 있다.
import numpy as np import pandas as pd
phone_number_list = {'first': [2752, 4206, 3755, 7661], 'second': [7821, 7821, 7821, 2500]} df = pd.DataFrame(phone_number_list) df
010을 추가해봅시다.
df["zeroth"] = ["010" for i in range(4)] df
field 순서가 마음에 들지 않네요. 원래 전화번호 순서대로 재배열해 봅시다.
df = df[["zeroth", 'first', 'second']] df
index의 이름을 변경해 봅시다.
df.rename(index={0:"Jo", 1:"Kim", 2:"Jo", 3:"Jo"}, inplace=True) df
Index "Jo"에 해당하는 행만 반환해봅시다.
df.loc["Jo"]
두 번째 인덱스에 해당하는 행까지 반환해봅시다.
df.iloc[:2]
끝자리가 7821로 끝나는 열에 True 값을 배정해줍시다.
df["family"] = df.second == 7821
Family 열을 지워봅시다.
# 둘 중 하나 사용 del df["family"] df.drop("family", axis=1, inplace=True)
index 명을 다시 0, 1, 2, 3으로 바꿔봅시다.
df.index = [0, 1, 2, 3]
first 열의 값에 2를 곱해봅시다.
df["first"].map(lambda x:x*2)
country_code 열을 생성해줍시다.
df["country_code"] = [82, 82, 82 ,82]
country_name 열을 생성해줍시다.
df["country_name"] = df["country_code"].replace({82:"한국"})
모든 element에 *2를 해 봅시다.
df.apply(lambda x: x*2)
Built-in 내장함수에 대해서 알아보자.
describe: numeric type 데이터 요약
df.describe()
unique: series data의 유일한 값을 list로 반환
df.unique()
sum: column 또는 row 값의 연산 지원 (min, max, mean, count, median, mad, var, etc.)
df.sum()
isnull: column 또는 row 값의 NaN 값의 index 반환
df.isnull()
sort_values: column 값을 기준으로 데이터를 정렬
df.sort_values(["column_name"], ascending=True)
corr: 상관계수 반환
df.first.corr(df.second)
cov: 공분산 반환
df.first.cov(df.second)
Groupby에 대해서 알아보자.
df.groupby(by, axis, level, as_index, sort, group_keys, squeeze, observed, dropna)
A groupby operation can be used to group large amounts of data and compute operations on these groups.
groupby는 generic type을 반환해준다.
따라서 df_group["column_name"].sum()과 같은 함수와 같이 사용해야 원하는 결과값을 반환한다.
df_grouped = df.groupby("zeroth") type(df_group)
pandas.core.groupby.generic.DataFrameGroupBy
groupby는 한 개 이상의 column을 함께 묶을 수 있다.
이때 반환되는 데이터프레임은 hierarchical index 형태가 된다.
df_grouped = df.groupby("team", "year")
hierarchical index를 다루기 위해 다음 함수를 사용할 수 있다.
df.unstack(): group으로 묶여진 데이터를 matrix 형태로 전환
df.swaplevel(): index level을 변경
df_grouped를 다루기 위해서 유용하게 사용할 수 있는 함수로 agg, transform, filter가 있다.
agg: 요약된 통계정보를 제공한다.
result = grouped_df.agg( {"age": [min, max], "fare": np.mean} )
transform: 개별 데이터의 변환을 지원한다.
result = df_grouped.transform(function_f)
filter: 특정 조건으로 데이터를 검색한다.
result = df_grouped.filter(lambda x: len(x) > 3)
필요하다면 pandas.pivot_table()와 pandas.crosstab()을 활용해보기 바란다.
피벗 테이블: 여러 데이터 중에서 자신이 원하는 데이터만을 가지고 원하는 행과 열에 데이터를 배치하여 새로운 보고서를 만드는 기능.
데이터를 합칠 때는 merge와 concat 함수를 사용한다.
pd.merge(df_a, df_b, on="column_name"): 두 개의 데이터를 하나로 합친다.
합치는 방법에 따라 how : {'left', 'right', 'outer', 'inner', 'cross'}, default 'inner'가 있다.
pd.concat(df_a, df_b): 같은 형태의 데이터를 붙인다.
axis : {0/'index', 1/'columns'}, default 0에 주의하자.
데이터 저장에 대해 알아보자
데이터 저장을 위해서 sqlite3, XLS나 pickle을 사용할 수 있다.
pickle로 변환하기 위해서 다음 두 가지 방법을 사용할 수 있다.
df_routes.to_pickle("./data/df_routes.pickle")
df_routes_pickle = pd.read_pickle("./data/df_routes.pickle")
끝!
'NAVER AI TECH' 카테고리의 다른 글
Word Embedding (4주차) (0) 2023.03.27 Intro to NLP (4주차) (0) 2023.03.27 3주차 회고록 (DL Basic & Data Visualization & Git) (0) 2023.03.24 2주차 회고록 (PyTorch) (0) 2023.03.17 1주차 회고록 (Python & AI Math) (0) 2023.03.10