1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 | # -*- coding: utf-8 -*- """Day 02_03_Exploratory Data Analysis_2.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1aKOiYKseQJaftEnNTBfEcEdkVRr0wi_V """ import pandas as pd import numpy as np # aixs = 0 -> 행 결합, 1 = 열 결합 , join = 'inner' 교집합만 합치겠다 , outter -> 합집합만 합치겠다 ,join_zxes = 인덱스를 새로 만들지 말지 결정., # ignore_index = T = 기존의 인덱스를 무시하고 새로 만들겠다. keys => 계층적 인덱스를 사용할떄, varify_integrity = > 유니크한 속성을 유지할지 말지 결정 df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']}, index=[0, 1, 2]) df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5'], 'C': ['C3', 'C4', 'C5'], 'D': ['D3', 'D4', 'D5']}, index=[3, 4, 5]) """###데이터 프레임을 합칠때 사용하는 함수 concat""" df12a0 = pd.concat([ df1, df2 ], axis = 0) df12a0 df3 = pd.DataFrame({'E': ['A6', 'A7', 'A8'], 'F': ['B6', 'B7', 'B8'], 'G': ['C6', 'C7', 'C8'], 'H': ['D6', 'D7', 'D8']}, index=[0, 1, 2]) df4 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'E': ['E0', 'E1', 'E2']}, index=[0, 1, 3]) df1 df3 """열의 이름이 다를때 axis = 0 이 기본이므로 남은 자리에는 NaN이 들어간다""" pd.concat([ df1, df3 ]) df13a1 = pd.concat( [ df1, df3 ], axis = 1) df1 df4 ## 행결합시 없는 컬럼에는 NaN 발생. join의 default는 outer => 합집합 df14o = pd.concat([df1, df4]) df14o # join을 inner로 주게되면 Nan이 발생하는 부분은 모두 빠져버린다. df14i = pd.concat( [ df1, df4 ], join = 'inner') df14i pd.concat( [ df1, df4 ], axis = 1, join = 'outer') pd.concat( [ df1, df4 ], axis = 1, join = 'inner') pd.concat([df1, df4], axis = 1 ) # 특정 데이터 프레임의 인덱스를 활용하고자 할때. # df1의 데이터 프레임을 기준으로 합칠지 확인 df14ja1 = pd.concat([df1, df4], axis = 1 , join_axes = [df1.index]) df5 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']}, index=['r0', 'r1', 'r2']) df6 = pd.DataFrame({'A': ['A3', 'A4', 'A5'], 'B': ['B3', 'B4', 'B5'], 'C': ['C3', 'C4', 'C5'], 'D': ['D3', 'D4', 'D5']}, index=['r3', 'r4', 'r5']) df5 df6 #ignoew pulse - Flllllllllllllas df56 = pd.concat([df5, df6]) pd.concat([df5, df6], ignore_index = True ) #계층적 인덱스 구성 df56 = pd.concat([ df5, df5], keys = ['df5', 'df6']) ## key가 df5인 행들 조회. df56.ix['df5'] pd.concat( [df5, df6], keys = ['df5','df6']) ## 2 depths dfname , rownum pd.concat( [df5, df6], keys = ['df5','df6'], names = ['dfname', 'rownum']) ## 인덱스 명이 중복이 있는지 없는지 확인 df7 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']}, index=['r0', 'r1', 'r2']) df8 = pd.DataFrame({'A': ['A2', 'A3', 'A4'], 'B': ['B2', 'B3', 'B4'], 'C': ['C2', 'C3', 'C4'], 'D': ['D2', 'D3', 'D4']}, index=['r2', 'r3', 'r4']) df7 df8 ## 인덱스 이름이 r2가 두개가 있으나 별 문제 없이 CONCAT이 된다. pd.concat([df7, df8]) ## 인덱스 중복 검사를 하기 때문에 인덱스가 중복될경우 에러를 내도록 한다. pd.concat([df7, df8], verify_integrity = True) """#Concat과 Append를 활용한 DataFrame 과 Series 의 결합 ###DataFrame과 Series의 결합 => DataFrame """ df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'], 'C': ['C0', 'C1', 'C2'], 'D': ['D0', 'D1', 'D2']}, index=[0, 1, 2]) df1 ## 시리즈의 이름으로 준 문자열은 추후에 컬럼명이 된다 ser = pd.Series( [ 's1','s2','s3' ], name = 'E' ) ser pd.concat([df1, ser], axis = 1, ignore_index = True) pd.concat([df1, ser], axis = 1) s1 = pd.Series([3, 4, 5]) s2 = pd.Series([3, 4, 5]) s3 = pd.Series([3, 4, 5]) ## concat에서 열이름을 주기. pd.concat([s1, s2, s3], axis = 1, keys = ['c1', 'c2', 'c3']) """# Merge""" # merge 함수 : how (left, right , inner(기본값), outer) # on : 병합의 기준이 되는 변수 dfleft = pd.DataFrame({'KEY': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) dfright = pd.DataFrame({'KEY': ['K2', 'K3', 'K4', 'K5'], 'C': ['C2', 'C3', 'C4', 'C5'], 'D': ['D2', 'D3', 'D4', 'D5']}) dfleft dfright """Key를 기준으로 병합 가능(조인)""" # 기본 inner 조인 pd.merge(dfleft, dfright) pd.merge(dfleft , dfright , on = "KEY", how = "left") pd.merge(dfleft , dfright , on = "KEY", how = "right") pd.merge(dfleft , dfright , on = "KEY", how = "outer" ) dfleft = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}, index = ['K0', 'K1', 'K2', 'K3']) dfright = pd.DataFrame({ 'C': ['C2', 'C3', 'C4', 'C5'], 'D': ['D2', 'D3', 'D4', 'D5']}, index = ['K2', 'K3', 'K4', 'K5']) dfleft dfright """공통 컬럼이 없을때""" ## 왼쪽 ,오른쪽 모두다 존재하는 인덱스에 대한 데이터 병합 pd.merge( dfleft, dfright, left_index = True, right_index = True ) pd.merge( dfleft, dfright, left_index = True, right_index = True , how = 'left') ## dfleft에다가 () 안에 있는것을 조인하라. dfleft.join(dfright, how = 'left') """#결측치에 대한 처리""" dfleft = pd.DataFrame({'KEY': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']}) dfright = pd.DataFrame({'KEY': ['K2', 'K3', 'K4', 'K5'], 'C': ['C2', 'C3', 'C4', 'C5'], 'D': ['D2', 'D3', 'D4', 'D5']}) dfa = pd.merge( dfleft, dfright, on="KEY", how = "outer") dfa dfa.isnull() dfa.isnull().any() dfa.notnull() # None 과 NaN 확인 dfa.info() dfleft = pd.DataFrame({'KEY': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': [1.1, 2.2 , 3.3 , 4.4]}) dfright = pd.DataFrame({'KEY': ['K2', 'K3', 'K4', 'K5'], 'C': ['C2', 'C3', 'C4', 'C5'], 'D': ['D2', 'D3', 'D4', 'D5']}) dfa = pd.merge( dfleft, dfright, on="KEY", how = "outer") dfa.info() dfa dfa.ix[ 0 : 1, 1 : 3] # dfa.ix[[0,1], ['A', 'B']] dfa.ix [ 0 : 1 , ['A', 'B']] = None # None 과 NaN이 둘다 공존하고 있다. # 열의 타입이 오브젝트인 경우에 None이 들어가고 숫자일 경우에 NaN이 들어간다. dfa ## info를 찍어보면 entries - non-null앞에 수로 null이 몇개인지 알 수 있다. dfa.info() # 각각의 컬럼별로 null이 몇개인지 알 수 있다. dfa.isnull().sum() #특정 열에 대해서만 null의 갯수를 센다. dfa['A'].isnull().sum() ## 행별 널이 있는지 없는지 확인 dfa.isnull().sum(axis = 1) """파생 변수 ( 컬럼 추가 )""" ## 널 갯수를 표시하는 컬럼 추가 dfa['NaN_Num'] = dfa.isnull().sum(axis = 1) dfa dfa['NotNaN_Num'] = dfa.notnull().sum(axis = 1) dfa df = pd.DataFrame(np.arange(10).reshape(5,-1), columns = ['c1', 'c2'], index = ['a','b','c','d','e']) df """b,e 행 c1열에 None, b,c c2열 None 대입""" df.ix[ ['b', 'e'] , ['c1'] ] = None df.ix[ ['b', 'c'] , ['c2'] ] = None df # 기본 axis = 0 , NaN을 0으로 취급한다. df.sum() # 누적합 df.cumsum() # NaN을 아애 대상에서 제외시켜 버린다. # axis 기본 = 0 df.mean() df.std() df #데이터 프레임 연산에서는 NaN은 NaN을 리턴한다. df['c3'] = df['c1'] + df['c2'] df """#결측치 대체""" df = pd.DataFrame(np.random.randn(5,3), columns = ['c1','c2','c3']) df df.ix[ 0, 0 ] = None df.ix[ 1, ['c1', 'c3'] ] = np.nan df.ix[ 2, ['c2'] ] = np.nan df.ix[ 3, ['c2'] ] = np.nan df.ix[ 4, ['c2'] ] = np.nan ## NaN에다가 숫자 넣기 df.fillna(100) df.fillna( 'missing' ) df.fillna(method = 'ffill') df.fillna(method = 'ffill', limit = 1) ## NaN의 자리에 평균 넣기 df.mean() df.fillna(df.mean()) # c1의 평균으로 모든 컬럼을 채운다. df.fillna(df.mean()['c1']) """Numpy Where 절을 활용한 NA 대체""" df2 = pd.DataFrame({'a1' : [1,2,3,4,5], 'a2' : [10,11,12,13,14]}) df2.ix[[1,3], ['a2'] ] = None df2 # a3열 추가 # a2열의 값이 NaN이면 a1의 값으로 a3열을 채우고 a2열이 NaN이 아니면 a2열의 값으로 a3열을 채우라. df2['a3'] = np.where( df2['a2'].notnull() == True, df2['a2'], df2['a1']) df2 | cs |
'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글
Day 4. binomializing [ OneHotEncoding ] (0) | 2019.07.06 |
---|---|
Day 03. Scaler (0) | 2019.07.03 |
Day 03. Replacement (0) | 2019.07.03 |
Day 02. Pandas Review - 1 (0) | 2019.07.02 |
Day 01. Numpy Fundamental Operations Review (0) | 2019.07.01 |