대학원 일기

pandas II 본문

AI/인공지능 기초

pandas II

대학원생(노예) 2022. 2. 13. 05:04

Pandas II

  • Groupby
  • Hierarchical index
  • aggregation
  • transformation
  • pivot table
  • merge & concat
  • join
  • DB persistence

Groupby

- SQL 쿼리문의 명령어와 같음

- 기존 데이터에서 Key 값을 기준으로 split을 해주고, 어떠한 함수(sum)를 적용해주고 결과값을 결합(combine)한다.

- 과정을 거쳐 연산함: split → apply → combine

df = pd.DataFrame(ipl_data)

groupby_1 = df.groupby("Team")["Points"].sum()
groupby_2 = df.groupby(["Team", "Year"])["Points"].sum()

- 한 개 이상의 column으로도 묶을 수 있다.

 

Hierarchical index

- Groupby 명령의 결과물도 결국은 dataframe

- 두 개의 column으로 groupby를 할 경우, index가 두개 생성

h_index = df.groupby(["Team", "Year"])["Points"].sum()

A = h_index.index
B = h_index["Devils":"Kings"]

 

Hierarchical index - unstack()

- Group으로 묶여진 데이터를 matrix 형태로 전환한다.

h_index.unstack()

 

Hierarchical index - swaplevel

- Index level을 변경할 수 있다.

h_index.swaplevel()

 

Hierarchical index - operations

- Index level을 기준으로 기본 연산 수행 가능하다.

Groupby II

Groupby – gropued

- Groupby에 의해 Split된 상태를 추출 가능함

- 특정 key값을 가진 그룹의 정보만 추출 가능

- 추출된 group 정보에는 세 가지 유형의 apply가 가능함

- Aggregation: 요약된 통계정보를 추출해 줌

- Transformation: 해당 정보를 변환해줌

- Filtration: 특정 정보를 제거 하여 보여주는 필터링 기능

 

Aggregation

 

Transofrmation

- Aggregation과 달리 key값 별로 요약된 정보가 아님

- 개별 데이터의 변환을 지원함

 

filter

- 특정 조건으로 데이터를 검색할 때 사용

- filter안에는 boolean 조건이 존재해야함

- len(x)는 grouped된 dataframe 개수

 

Merge & Concat

- SQL에서 많이 사용하는 Merge와 같은 기능

- 두 개의 데이터를 하나로 합침

df_a = pd.DataFrame(raw_data, columns = ['subject_id', 'test_score'])
df_b = pd.DataFrame(raw_data, columns = ['subject_id', 'first_name', 'last_name'])

- df_a에는 subject_id와 test_score가 있고, df_b에는 subject_id와 first_name, last_name이 있다.

- subject_id 기준(on)으로 merge

- 두 dataframe이 column이름이 다를 때 

df_a에서는 df_a의 subject_id를 기준으로, df_b에서는 df_b의 subject_id를 기준으로

 

Join method

how 를 사용하면 join하게 된다.

- df_a을 기준으로 db_b를 join함. LEFT JOIN(df_a 집합)

- df_b을 기준으로 db_a를 join함. RIGHT JOIN(df_b 집합)

- df_a와 df_b가 모두 가지면서 겹치는 subject_id를 출력. INNER JOIN(교집합이라고 생각)

- df_a와 df_b에 있는 모든 것을 출력. FULL JOIN(합집합이라고 생각)

index based join

- index 값을 기준으로 JOIN 함

DB Persistence

Load database

import sqlite3 #pymysql <- 설치

conn = sqlite3.connect("./data/flights.db")
cur = conn.cursor()
cur.execute("select * from airlines limit 5;")
results = cur.fetchall()

 

Data loading using pandas from DB

df_airplines = pd.read_sql_query("select * from airlines;", conn)

 

Comments