#!/usr/bin/env python # coding: utf-8 # # **Pandas Tables** # ## **01 Load DataSet** # In[15]: import pandas url = 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13' df = pandas.read_html(url, header=0)[0] df['종목코드'] = df['종목코드'].map(lambda x: f'{x:0>6}') df.head(2) # In[16]: # 필드 1개라도 NaN 포함 필터링 import numpy print(df[df.isin([numpy.nan, numpy.inf, -numpy.inf]).any(1)].shape) df.isnull().sum() # In[17]: # 불필요한 필트 필터링 df.drop(labels=['주요제품', '홈페이지'], axis=1, inplace=True) df.tail(2) # ## **02 NaT Interpolation** # - NaT : `datetime` 의 `numpy.nan` 객체 # - **Django ORM** 은`None` 사용 cf) **numpy.nan** 은 `nan` 텍스트를 저장한다 # # ```python # # NaN 과 NaT 는 호환된다 # pandas.to_datetime(df['상장일']) -> string to `datetime` # pandas.isnull(pandas.NaT) -> True, False # ``` # In[2]: import numpy, random for _ in range(2): # 임의의 None 값 테이블에 추가하기 df['상장일'][random.randint(1, len(df))] = numpy.nan df['상장일'] = pandas.to_datetime(df['상장일']) df[df['상장일'].isnull()] # In[3]: import datetime index_list = df[df['상장일'].isnull()].index.tolist() df['상장일'] = list( map(lambda x: pandas.to_datetime(datetime.date(1900,1,1)).date() if (pandas.isnull(x)) else x, df['상장일'] )) df.loc[index_list,:] # ## **03 Filtering** # 정규식을 사용한 필터링 # In[4]: token = "통신" import re tokenizer = re.compile(f'{token}') tokens = list(filter(lambda x : len("".join(tokenizer.findall(x))) != 0 , df['업종'].to_list())) ", ".join(set(tokens)) # In[5]: df['업종'].to_list()[0]