본문 바로가기
[ Python ]

[Python] pandas 기초(3) - 문제풀이

by 히앤님 2020. 10. 28.
반응형
SMALL

문제를 풀어보자.

▼답

더보기

import pandas as pd
csv_test = pd.read_csv('dataset/Dataset.csv')
csv_test.head()

간단하게 pd.read_csv로 읽어들인 뒤 head()를 써서 상위 5개만 뽑아보았다.


▼답

더보기

나눔고딕 폰트 설치 되어있어야 한다.

import matplotlib as mpl
import matplotlib.pyplot as plt
#유니코드 깨지는 현상 방지
mpl.rcParams['axes.unicode_minus'] = False
#폰트 설정
plt.rcParams['font.family'] = 'NanumBarunGothic'
#테스트
plt.figure()
plt.grid(True)
plt.plot((1,1))
plt.title("한글테스트")
plt.show()

 

▼답

더보기

#null값 있는 컬럼 보기
csv_test.isnull().sum()

#null값 시각화
import missingno as msno
msno.matrix(csv_test,figsize=(18,6))

csv_test.isnull().sum() 으로 각 컬럼의 결측치 갯수를 알 수 있고, missingno를 이용해서 결측치를 시각적으로(흰색부분) 볼 수 있다.

 figsize=(18,6) : 그래프 사이즈를 가로, 세로로 설정할 수 있다.


▼답

더보기

df=pd.DataFrame(csv_test,columns={'개방시설명', '위도', '경도','평일운영시작시각',
                                  '평일운영종료시각','사용기준시간', '사용료','소재지도로명주소', 
                                  '소재지지번주소', '사용안내전화번호','제공기관명' }
               )
df
# 사진대로 순서 변경
df = df[['개방시설명', '위도', '경도','평일운영시작시각',
                                  '평일운영종료시각','사용기준시간', '사용료','소재지도로명주소', 
                                  '소재지지번주소', '사용안내전화번호','제공기관명']]
df

일부 컬럼만 출력해서 dataframe을 만든다.

하지만 컬럼 순서가 제멋대로이기 때문에 순서를 맞춰준다.


▼답

더보기

df.info()

▼답

더보기

df.isnull().sum()

 

 

▼답

더보기
import numpy as np
#df_seogu에 '개방시설명' 중 '서구청소년수련관'만 담기
df_seogu=df[df['개방시설명']=='서구청소년수련관']
#사용기준시간 NaN값 '4시간 20,000원' 으로 변경
df_seogu['사용기준시간']=df_seogu['사용기준시간'].fillna('4시간 20,000원')
#df_seogu['사용료']=df_seogu['사용료'].fillna('4시간 20,000원')
#소재지지번주소의 Nan값을 소재지도로명주소값으로 대체
df_seogu['소재지지번주소']=df_seogu['소재지지번주소'].fillna(df_seogu['소재지도로명주소'])
#중복된 데이터 삭제
df_seogu=df_seogu.drop_duplicates()

#시각화
n_data = len(df_seogu['개방시설명'])
index = np.arange(n_data)
#시작시간 출력
start = df_seogu['평일운영시작시각']
df_seogu

#크기와 색깔 꾸미기
plt.rcParams["figure.figsize"] = (14,4)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams['lines.color'] = 'r'
plt.rcParams['axes.grid'] = True 

#막대그래프 출력
plt.bar(index,start,tick_label=df_seogu['사용료'],width =0.5)  #=> tick_label=openOffice['개방시설명'] 하면 개방시설명 으로 출력한다.
plt.show()

 


▼답

더보기

#공백으로 나눔 -> 공백으로 나누면 한단어인 경우엔  NaN이 됨. 그냥 나눴어야했음.
#splt = df['제공기관명'].str.split("")
splt = df['제공기관명'].str.split()

# 앞 첫번째 자리까지만 추출
city_name = splt.str[0]

df['도시명']=city_name
df['도시명']

▼답

더보기

df['개방시설명'].groupby(df['도시명']).count()
#또는
df.groupby(df['도시명'])['개방시설명'].count()

▼답

더보기

df[df['도시명']=='인천광역시']

반응형
LIST

댓글