본문 바로가기
A. Development/for Machine Learning

Pandas

by IMCOMKING 2018. 6. 29.

Pandas 팁

데이터 분석을 하다보면 numpy보다 pandas가 더 편한 경우가 종종있다. 물론 연산 속도는 numpy가 훨씬 빠르다.

1. SettingWithCopyWarning 해결하기

Pandas 에서 특정 row의 특정 column에 value를 집어 넣을 때 흔히 발생하는 에러이다. 이는 문법적으로 iloc함수에 대한 python에서 해석이 불분명하기 때문에 발생한다.

Indexing and selecting data - pandas 0.25.0 documentation

해결 방법은 매우 간단하다. 아래와 같이 iloc대신 loc를 사용하면 된다.

How to deal with SettingWithCopyWarning in Pandas?

 

 

 

# 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()

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.contains.html

 

 

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()
 
 

https://stackoverflow.com/questions/44528804/how-do-i-use-groupby-on-continuous-similar-values-for-a-pandas-dataframe

 

댓글