10 minutes to pandas 2

참고: Data Girls

### Boolean Indexing

import pandas as pd
    
dates = pd.date_range('20130101', periods=6)

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

df2 = pd.DataFrame({'A' : 1.,
                    'B' : pd.Timestamp('20130102'),
                    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
                    'D' : np.array([3] * 4,dtype='int32'),
                    'E' : pd.Categorical(["test","train","test","train"]),
                    'F' : 'foo' })

df[df.A > 0]

# Boolean 조건을 충족하는 데이터프레임 값 선택
df[df > 0]

df2 = df.copy()

df2['E'] = ['one','one','two','three','four','three']

df2

#isin() 함수를 통해 필터링
df[df2['E'].isin(['two','four'])]

# Setting (설정)
#새 열을 설정하면 데이터가 인덱스 별로 자동 정렬
s1 = pd.Series([1,2,3,4,5,6], ind)

s1

df['F'] = s1

# 라벨에 의해 값 설정
df.at[dates[0],'A'] = 0

df.iat[0,1] = 0

df.loc[:,'D'] = np.array([5] * len(df))

df

df2 = df.copy()
df2[df2 > 0] = -df2
df2

# 4. Missing Data (결측치)
# Reindexing으로 지정된 축 상의 인덱스를 변경 /추가/삭제 가능
# Reindexing은 데이터의 복사본 반환
df1 = df.reindex(index = dates[0:4], columns = list(df.columns)+ ['E'])
df1.loc[dates[0]:dates[1],'E'] = 1
df1

# 결측치를 가지고 있는 행들 삭제
df1.dropna(how='any')

# 결측치를 채워 넣음
df1.fillna(value = 5)

# nan 값에 boolean 표식
pd.isna(df1)

#### 5. Operation (연산)

#일반적으로 null값 제외하고 계산
df.mean()

# 다른 축에서 동일한 연산
df.mean(1)

# 정렬이 필요하며 차원이 다른 객체로 연산. 
#pandas는 지정된 차원을 따라 자동으로 브로드 캐스팅된다.
s = pd.Series([1,3,5,np.nan,6,8],index=dates).shift(2)

df.sub(s, axis = 'index')

# Apply(적용)
#데이터에 함수 적용
df.apply(np.cumsum)

df.apply(lambda x: x.max() - x.min())

# Histogramming(히스토그래밍)
s = pd.Series(np.random.randint(0, 7, size=10))

s

s.value_counts()