[데이터 분석 기초] Series, DataFrame, Groupby
[Pandas]
- 데이터 분석을 위한 라이브러리
[Series]
- dict 형태의 pandas 라이브러리. 1차원 배열을 나타냄.
- Series(data, index) : Series 데이터 타입 생성 (index 활용 가능)
- s.loc[ 'index' ] / s.iloc[ 0:3 ] : Series 인덱싱/ 슬라이싱
- s.iloc[ [0, 2] ] : 불연속적인 index에 해당하는 값 추출도 가능하다.
- s.loc['index'] = value : 새로운 딕셔너리 값 추가 (dict['key'] = value 와 유사한 형태)
- s.drop['index'] : 데이터 삭제
=======================
- broadcasting : 시리즈간 연산을 지원한다.
- Series( [10, 20, 30], index=['가', '나', '다'] ) + Series( [20, 30, 40], index = ['나','가','다'] )
: 같은 인덱스끼리 연산한다. 인덱스가 다르면 연산하지 않는다.
- Series.loc[ Series < 1000 ] : 연산자를 통해 True의 값만 불러온다.
- Series.loc[ Series < 1000].index : 인덱스만 추출.
- Series.loc[ Series < 1000].values : 값만 추출.
=======================
- Series([], dtype='category') : 사용 메모리를 효율적으로 줄여준다.
- s.memory_usage() : 사용 메모리를 나타낸다.
- s.info() : series의 정보를 돌려준다 (메모리 사용량..)
- s.to_datetime('날짜') : timestamp 값을 반환한다.
print(ts.year)
print(ts.week)
print(ts.month)
print(ts.day)
- s.astype('int') : 기존 object type에서 int type으로 변환
- s.replace(',','',regex=True) : 데이터 치환 (완벽히 동일한 문자/숫자만 찾아서 변환)
- s.str.replace(",","") : 문자열만 찾아서 변환
- s.str[0:3] : 문자열 인덱싱
- s.map(함수명) : 시리즈 데이터타입에서 함수를 호출해서 사용할 수 있다. (단, 이때 함수명을 map 함수를 활용해 호출한다. 그리고 return 값이 시리즈 값이 반복적으로 들어간다.)
[매서드]
- s.sort_values() : 오름차순으로 정렬
- s.sort_values(ascending=False) : 내림차순으로 정렬
- s.sort_index(ascending=False) : 내림차순으로 인덱스 값 정렬
- s.rank() : 값의 크기 순서를 매기는 매서드
- s.value_counts() : 값의 개수를 출력해준다.
[판다스 데이터프레임]
- 2차원 리스트 형태의 배열을 가진다.
- 딕셔너리, 리스트 형태로 저장 가능.
- df = DataFrame(리스트, columns= ['시가', '고가', '저가', '종가']) : Column 명 설정이 가능하다.
- df.mean(axis = 1) : 2차원 배열 평균 연산 (if axis == 1: row index)
- df.head(1)/tail(1) : 데이터 량이 방대할 때, 몇개의 데이터만 보고 싶은 경우 활용. (default = 5)
- df.fillna() : 결측값에 대해 판다스는 Nan로 출력하지만, 특정 값으로 대체하고 싶을 때 활용.
- df.isna() : 결측값 존재유무에 대해 boolean으로 알려준다.
- df['등록일자'].astype('string') : 형변환
[데이터프레임과 인덱싱]
- row: 행, column: 열
- df.iloc[0] : row data를 불러들일 때 사용한다.
- df.loc['index'] : column data를 불러들일 때 사용한다.
- df.loc[ df['column'] > 100 ] : 조건에 해당하는 index 값에 해당되는 row 출력
- df.loc['index'].loc['column'] : index 통해 row 추출하고 다시 column 추출
- df['column'].loc['index'] : column 추출하고 다시 row 추출
[adv. 인덱싱]
- 이중 indexing을 위한 방법
- df.loc[행, 열]
- df.iloc[열 숫자, 행 숫자] : iloc는 숫자로 데이터에 접근하기 때문에 행, 열 정보를 숫자로 지정해야 합니다.
[adv. 슬라이싱]
- df.loc[ ['20200615','20200618'], ['고가', '종가']] : 리스트 값을 넣어서 2차원 배열의 슬라이싱을 구현.
- df.iloc[ [0, -1], [1, -1]] : iloc는 숫자로 데이터에 접근하기 때문에 행,열 정보를 숫자로 지정해야 합니다.
[데이터프레임 생성/삭제]
- res = df.drop( '20200619' ) : 해당 row 삭제
- res = df.drop('저가',axis = 1): 해당 column 삭제
- df.loc['20200619'] = [20, 20, 20, 20] : 해당 row 추가
[인덱스 및 칼럼 설정하기]
- df.reset_index() : 인덱스 초기화 및 새로운 index 이름의 column 생성.
- res = df.set_index('종가') : column 이름으로 index 설정.
- df.index.name = '일자' : index name 설정.
- df.columns.name = 'b' : column name 설정.
- df = pd.concat([df1, df2], axis=1) : 두 df를 붙이는 매서드.
- pd.merge(df1, df2, on="구분") : 두 df를 중복되는 값만 붙이는 매서드. (on에 해당되는 값을 기준으로 중복될 때만 값 머지함.)
[데이터 프레임 그룹화]
- split: 특정 컬럼을 기준으로 같은 값을 같는 데이터로 분할한다.
- apply: 분할된 각각의 데이터에 min/max .. 적용한다.
- combine :
- groupby : split/apply/combine 세개를 복합적으로 수행해주는 명령어
- df['sex'].unique() : 'sex' 칼럼에 해당되는 값을 한개씩만 출력해준다.
df['호선명'].unique()
set( df['호선명'].values )
- `groupby` 메서드를 사용하면 특정 컬럼을 기준으로 데이터를 분류할 수 있습니다.
- gb.get_group('m') : groupby를 통해 테이블이 잘 나뉘었는지 알아볼 수 있다.
-`DataFrameGroupBy` 객체의 `agg` (aggregation) 메서드를 사용해서 같은 기능을 구현할 수 있습니다. `agg` 메서드는 분리된 데이터프레임을 처리할 함수를 입력받습니다. 이 때 함수는 하나의 파라미터를 입력받아 하나의 값을 `return` 해야 합니다.
- df.groupby('sex').agg(proc)
gb1 = df[['사용일자', '승차총승객수']]
gb1.set_index('사용일자')
gb1.groupby('사용일자').sum()
--- Example ---
how = { '승차총승객수': 'sum' }
df.groupby('사용일자').agg(how)
def proc(x):
return x.sum()
df[['사용일자','승차총승객수']].groupby('사용일자').agg( proc )