라벨이 pandas인 게시물 표시

[Pandas] Dataframe의 값을 유일하게 식별하고 카운트하기

 import pandas as pd df = pd.DataFrame({'A':[1,2,3,2,3,2], 'B':[2,3,4,3,4,3], 'C':[3,4,5,4,5,4]}) df1 = df.apply(pd.Series.value_counts) df1      A    B    C 1  1.0  NaN  NaN 2  3.0  1.0  NaN 3  2.0  3.0  1.0 4  NaN  2.0  3.0 5  NaN  NaN  2.0 df2 = df1.fillna(0) # Nan to 0 df2      A    B    C     1  1.0  0.0  0.0  2  3.0  1.0  0.0  3  2.0  3.0  1.0  4  0.0  2.0  3.0  5  0.0  0.0  2.0  df2['D'] = df2['A'] + df2['B'] + df2['C'] df2       A    B    C    D 1  1.0  0.0  0.0  1.0 2  3.0  1.0  0.0  4.0 3  2.0  3.0  1.0  6.0 4  0.0  2.0  3.0  5.0 5  0.0  0.0  2.0  2.0

[Pandas] df for loop 속도 개선

이미지
  Pandas 에서 반복을 효율적으로 처리하는 방법 Pandas 를 통해 데이터 프로세싱을 할 때 종종 해야할일은 행에 반복적으로 접근을 하면서 그 값을 조작하는 일이다. 예를 들어, missing value 가 0 으로 코딩이 되어있는데, 이를 다른 값으로 바꾸고 싶을 경우 또는 A 컬럼의 값이 missing 일 때, B 컬럼의 값을 수정하고 싶은 경우 등이 있다. 이러한 작업을 하기 위해서는 모든 행을 조회 하면서 값을 조회하고 수정하는 일이 필요하다. 이번 포스팅에서는 이러한 반복작업이 필요한 상황에서 어떤 방법이 가장 효율적일지에 대해 정리해보려고한다. 사용할 데이터 diabetes.csv 1) pd.iterrows() 가장 기본적이고 많이 사용하는 방법이 iterrows 함수를 이용하는 것이다. 하지만 iterrows 함수는 다른 방법에 비해 느린 편이다.  import pandas as pd import numpy as np import matplotlib . pyplot as plt import seaborn as sns % matplotlib inline diabetes = pd . read_csv ( "diabetes.csv" ) diabetes . head ( ) Pregnancies Glucose BloodPressure SkinThickness Insulin BMI DiabetesPedigreeFunction Age Outcome 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1 missing value 가 0 으로 코딩이 되어있는데, 이를 nan 으로 바꾸는 코드를 iterrows 를 이용해서 짜보자.  def fix_mi...

[Pandas] to_sql 속도 개선

  create_engine 옵션 use_batch_mode=True : 소스에서 create_engine(url, client_encoding='utf8', use_batch_mode=True) 처럼 사용. (mysql 지원하지 않음, Postgre만 지원하는 듯) fast_executemany=True : 이건 python odbc 드라이버를 사용할 때 사용할 수 있는 옵션 같은데 아직 테스트해보지 못했음. to_sql 옵션 : method='multi' df.to_sql('table_name', con=engine, if_exists='append', chunksize=1000, index=False, method='multi') 각각의 방법으로   1000 건 , postgresql   에   insert   하는 시간 테스트해본 결과. 원래 소스(옵션 적용 없는 상태) : 58.40686011314392 seconds use_batch_mode=True (1.1) 만 적용했을 때 : 11.04028344154358 seconds use_batch_mode=True 와 method='multi' 적용 ( 1.1 + 2 ) : 3.76364803314209 seconds Chunksize Memory (MiB) Time (s) 100 142.13 36.9 1,000 141.38 13.8 10,000 141.38 12.1 100,000 209.88 12.7 200,000 312.15 12.5