[플레이데이터 빅데이터 부트캠프]Python Pandas(2)

Subset  Observation 

데이터 시각화를 위해서 상관관계가 있는 데이터들을 가져오는 기법이다.

열(column) 단위 읽기

df['Name']
# 하나의 열만 불러오는 방법이다.
df[['Name', 'Score']]
# 두 개 이상의 열을 불러올 수도 있다.
#tip
df.loc[:,['Name','Score','Age']]
# 맨마지막꺼 하나 빼고 나머지 칼럼을 다 불러올 때,
df.iloc[:,-1]

행으로만 가져오는 방법도 따로 있다. 가장 마지막 코드처럼 df.loc 메소드를 사용하여, 원하는 행을 슬라이싱 하는 방법도 있다.

행(row) 단위 읽기

df.loc['row1']

df.loc[['row2', 'row1']]

df.loc['row2', 'Name']    #row2 행과 'Name'열의 칼럼의 데이터를 불러오라.
'S2'

Summarizing Data

df.head(1) : 데이터의 맨 앞을 보는 명령어 () 기본값은 5줄

df.tail() : 데이터의 맨 뒤를 보는 명령어 () 기본값은 5줄

df.info() : 데이터의 자료형, 각 칼럼명, 비어있지 않은 자료의 개수, 용량 등을 보여준다.

df.describe(include = 'all')  해당 자료에 대한 기본적 산술통계를 보여준다.

df.isnull() : 없는 값을 찾는 메소드이다.

df.value_counts() : 값이 다 차 있는 애들을 보여준다.

Logical Operation

조건에 맞는 데이터프레임을 출력해낼 수 있다.

df[df['Age']>22]

혹은 Logic Operation을 사용하여, 조건에 맞는 값을 새로운 열에 추가할 수도 있다. 

df.loc[df['Score']<80, Result] = 'Fail'

Exporting to excel

판다스의 장점은 다른 파일로 호환성이 좋다는 것이다. 만약에 엑셀파일로 저장하고 싶으면, 

df.to_csv('test.csv)

불러오고 싶을 때는 아래와 같은 코드를 입력하면 된다. 군더더기 없이 깔끔하게 사용하려면,

index_col=0을 사용하면 좋다.

pd.read_csv('test.csv, index_col=0)

하지만 엑셀파일을 파이썬에서 그대로 사용하려면 파이썬에서 변수명을 지정해서 사용해야야 한다.

df_import = pd.read_csv('test1.csv', index_col=0)

File I/O

파일을 엑셀 파일로 보내고 싶으면,

df.to_excel('data.xlsx')
df.to_csv('data.txt')

텍스트 파일 방법으로도 만들 수 있다. 참고로 csv 파일은 텍스트 파일로도 호환이 가능하다.

Groupby Analysis

df.groupby("묶음의 기준이 되는 칼럼명")["적용받는 칼럼"].적용받는 연산()

# 만약에 Class와 스코어 칼럼에 대한 값이 표기된 데이터프레임이 있다고 가정하자.
df.groupby('Class').mean()
# 그러면 Class 칼럼에 관한 나이나 점수에 관한 평균 값이 도출될 것이다.

df.groupby('Class')['Score'].mean()
# 아래와 같이 평균값을 적용받는 칼럼을 설정할 수도 있다.

좀 더 예쁘게 출력하려면, 적용받는 칼럼 리스트에 한번 더 대괄호를 쳐주면 좋다.

df_import2.groupby('반')[['테스트점수']].mean()

※ replace 메소드는 NaN 값을 0으로 바꿔줄 수 있는 유용한 메소드이다.

df1 = df.replace(np.nan, 0)

Melt 

Melt 메소드는 데이터를 보기 좋게 정렬하는데 유용하다.

녹여서 다시 붙힌다는 의미로 시각화에서 많이 사용되는 기법이다.

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None, ignore_index=True)

예시)

import pandas as pd

df1=pd.DataFrame({'store':['Costco','Costco','Costco','Lotte Mart','Lotte Mart','Lotte Mart',"E-mart","E-mart","E-mart"],
               'product':['Potato','Onion','Cucumber','Potato','Onion','Cucumber','Potato','Onion','Cucumber'],
               'price':[3000,1600,2600,3200,1200,2100,2000,2300,3000],
                'quantity':[25,31,57,32,36,21,46,25,9]})

df2.melt(id_vars=['price', 'quantity'])

df2.melt(id_vars=['product','store'], var_name='product_info', value_name='product_value')

이런식으로  여러 데이터 조합에서 집중적으로 볼 항목들을 사용자가 임의적으로 지정할 수 있도록 도와준다.

멜트는 피벗 테이블 등과 같이 많이 사용된다.

데이터프레임 조작

데이터프레임에 칼럼이 존재하지 않을 때 새로 생성할 수 있다.

df['지역'] = '서울'

데이터를 조작할 때, 특정한 조건을 두어 데이터프레임에 집어넣을 수도 있다.

df.loc[df['테스트점수'] < 70, '상태'] = '추가학습'

df.loc[df['테스트점수'] >= 70, '상태'] = '잘하고 있음'

다중조건

판다스에서는 and, or, not 연산자를 &(앰퍼샌드), ㅣ(파이프라인),  ~(틸드)를 사용한다.

# 점수가 75점 이상 맞은 사람 중에 장미나 개나리반 사람을 검색해주세요 
df[(df.테스트점수 >= 75) & ((df.반 == '장미') | (df.반 == '개나리'))] # or, and, not

# 점수가 75점 이상 맞은 사람 중에 장미나 개나리반이 아닌 사람을 검색해주세요
df[(df.테스트점수 >= 75) & (~(df.반 == '장미') | ~(df.반 == '개나리'))]