pandas - 시각화 이용법(1)
인덱스
series.index = array / DataFrame.index = array / DataFrame.columns = array
인덱스를 변경할때
위에서 ‘콜롬명’열을 먼저 인덱스로 설정하고 다시 ‘음악’열을 인덱스로 부여해줄때, 기존의 인덱스 열인 ‘이름’은 사라진다. 추가로 drop=True 옵션을 지정해주면 인덱스로 지정은 하되, 기존열을 남겨놓는다.
print(ndf1.set_index('콜롬명', drop=False))
df.rename(columns={'$a':'a', '$b':'b', '$c':'c', '$d':'d', '$e':'e'})
df.rename(lambda x: x[1:], axis='columns')
df.rename(lambda x: x[1:], axis=1)
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis='columns', inplace=False)
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis=1, inplace=False)
인덱스 설정 해제
인덱스를 제거하기 위해서는 reset_index()를 사용합니다.
인덱스를 추가
# state를 인덱스로 추가
# 인덱스는 name과 state로 설정
df_mi = df_i.set_index('state', append=True)
복수 인덱스의 순서변경
# state와 name 인덱스 위치를 변경 print(df.swaplevel(0, 1))
행 인덱스재배열
reindex()함수는 기존 데이터프레임의 행 인덱스를 기반. 기존의 값이 없으면 NaN으로 채워준다. 0으로 채우려면 fill_value=0옵션을 주면된다
행 초기화=0/한칸 밀려남
행인덱스를 정수형, 기본값인 0부터 시작하는 순서로 초기화해보자. 한칸 밀려날뿐이라, 이럴때 drop=True옵션을 주면 기존 인덱스를 버리고 재배열해준다. 또한 새로운 변수ndf에 넣지 않고 inplace=True옵션을 줘서 바로 바꿔버려도 된다.
ndf = df.reset_index()
행 이름 변경
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis='columns', inplace=False)
df.set_axis(['a', 'b', 'c', 'd', 'e'], axis=1, inplace=False)
시각화-그래프의 x,y축 정하기/콜롬이름
df[boolean_male & boolean_manager & boolean_not_all].plot(\
kind='bar', x='race_ethnicity', y='count')
모든 행 index별로 다른 색으로 구분하고 싶다면!
# 대안 1 df1['count'].plot(kind='bar') # 대안 2 df1.loc[:,'count'].plot(kind='bar') # 대안 3 df1.plot(kind='bar',y='count')
제외하는 row 예시
1) df['raceethnicity'] != 'All' 조건을 추가하시면 됩니다!
2) drop의 기능 pandas공식문서를 보시면, pandas.DataFrame.drop에서 axis 파라미터는?
axis : {0 or ‘index’, 1 or ‘columns’}, default 0 Whether to drop labels from the index (0 or ‘index’) or columns (1 or ‘columns’)
axis = 1일때, 열을 기준으로 drop을 하는 것이고 axis = 0일때 행을 기준으로 drop한다고 보시면 될 거 같아요
파이 그래프
index를 기준으로 이름표를 붙여주게 됩니다. set_index를 활용해서 index를 바꿔줍시다.
abobe_job.set_index('job_category', inplace=True)
abobe_job.plot(kind='pie', y= 'count')
axis=0,axis=1이란?
import numpy as np
array = np.random.randint(10, size=(5,3))
array
----------------------------
array([[8, 6, 9],
[0, 1, 5],
[7, 7, 8],
[8, 4, 1],
[2, 3, 2]])
여기서 axis = 0은 무엇일까?
5,3 행렬에서 처음 5라고 생각하면되고, 다섯개의 원소를 죄다 더한다고 보면 된다.
np.sum(array, axis = 0)
----------------------------
array([25, 21, 25])
더했기 때문에, 다섯개는 모두 더해지고 세개만 남는다.
만약 axis = 1로 놓는다면, 이제는 (5,3) 중 3이 합쳐지고 다섯개의 원소가 남는다.
np.sum(array, axis = 1)
----------------------------
array([23, 6, 22, 13, 7])
이차원의 데이터는 이해하기 쉬운데, 삼차원의 데이터는 어떨까?
array3 = np.random.randint(10, size=(5,3,2))
array3
----------------------------
array([[[9, 4],
[9, 7],
[5, 2]],
[[8, 9],
[6, 4],
[0, 9]],
[[9, 4],
[3, 9],
[0, 8]],
[[4, 6],
[0, 2],
[3, 6]],
[[7, 7],
[4, 1],
[8, 5]]])
이제, 세가지의 데이터 방향이 있다. np.sum에서 axis = 0,1,2는 차례대로 5,3,2 데이터를 하나로 합쳐준다.
합계를 구하는 간단한 np.sum은 0은 5를 없애고 3,2를 남기고, 1은 3을, 2는 2를 없애고 나머지 차원을 살린다.
print(np.sum(array3, axis = 0))
print("")
print(np.sum(array3, axis = 0).shape)
----------------------------
[[37 30]
[22 23]
[16 30]]
(3, 2)
print(np.sum(array3, axis = 1))
print("")
print(np.sum(array3, axis = 1).shape)
----------------------------
[[23 13]
[14 22]
[12 21]
[ 7 14]
[19 13]]
(5, 2)
print(np.sum(array3, axis = 2))
print("")
print(np.sum(array3, axis = 2).shape)
----------------------------
[[13 16 7]
[17 10 9]
[13 12 8]
[10 2 9]
[14 5 13]]
(5, 3)