Search
Duplicate

Pandas 팁

Created
5/28/2021, 10:28:00 AM
Tags
Empty

Pandas

데이터 분석을 하다보면 numpy보다 pandas가 더 편한 경우가 종종있다. 물론 연산 속도는 numpy가 훨씬 빠르지만, pandas는 훨씬 추상적인 method들을 많이 제공한다.

간단한 구현

Row-wise 랜덤 셔플링하기

data_df = data_df.sample(frac=1, axis=0).reset_index(drop=True)
Python

1. SettingWithCopyWarning 해결하기

Pandas 에서 특정 row의 특정 column에 value를 집어 넣을 때 흔히 발생하는 에러이다. 이는 문법적으로 iloc함수에 대한 python에서 해석이 불분명하기 때문에 발생한다.
해결 방법은 매우 간단하다. 아래와 같이 iloc대신 loc를 사용하면 된다.
# Groupby
특정 column을 지정하고, 해당 column을 일종의 ID로 생각한다. 그래서 여기에 등장한 unique ID의 종류(N개) 만큼으로 데이터의 row를 쪼개서 N개의 table로 나눈다, 이 N개 table의 row 길이를 모두 더하면 원래의 table과 동일하다.
# Partial sum for given index
이를 for문 없이 구현하는 방법은 두가지이다.
1. 해당 column을 우선 cum sum하고, 주어진 index의 cumsum값만 가져온다음 이를 diff
2. 1111112222333333 이런식으로 index 정보를 그룹 id 처럼 해석해서 모든 row마다 레이블링 컬럼을 추가한다음, groupby하면 n개의 table로 쪼개짐. 이 n개 table을 각각 sum하면됨

String 검색하기

s1.str.contains()

API이해하기

df.groupby(): 특정 column의 row value들 중 똑같은 값을 가진 것들을 각각 묶어서 column을 만드는 것이다. 즉 "성별" column이 있고, 여기에 남, 녀라는 value만 있다면, 이 row들을 남/녀 각각의 column으로 묶는다.

고급 구현 스킬

연속적으로 동일한 value를 가진 row끼리 groupby하기

ex)
A   B
1   a
1   b
1   c
2   d
2   e
1   f
1   g
->
1: [a,b,c]
2: [d,e]
1: [f,g]

핵심 원리: df를 한칸 아래로 shift한다음, 원래 df와 not_equal을 해서 값이 변하는 부분만 1로 마킹을 하고, 이 값을 cumsum을 해서 groupby에 사용되는 기준값으로 쓴다.

df = df["B"].groupby(df["A"].ne(df["A"].shift()).cumsum()).apply(list).reset_index()
TOP