ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Method] Data manipulation
    AI부트캠프 2020. 12. 31. 00:17

    [Section1-Sprint1]

     

    1. 여러파일 한꺼번에 read하기

    1) 파일별로 각각의 dataframe에 저장해서 concat

    fileList = ['1.csv', '2.csv', '3.csv', '4.csv', '5.csv', '6.csv']
    fileList = list(reversed(fileList))

    for i in range(6) :
          exec(f'df{i+1} = pd.read_csv(fileList.pop())')

    df = pd.concat([df1, df2, df3, df4, df5, df6])

    여러 파일을 읽어와야해서 위와 같은 방법을 사용했었는데, 다소 비효율적인 방법인 것 같아 다른 방법을 모색해보았다.

    fileList = glob('filename*.csv') #같은 디렉토리 내, 이름에 특정문자열이 포함된 파일들 glob
                                           #예)filename1.csv, filename2.csv 등등
    pd.concat((pd.read_csv(file) for file in fileList), axis=0)

    이렇게 하면 한번에 concat까지 가능하다.

     

    2. set_index(), reset_index()의 사용

    df.set_index('col', drop=True, append=False, inplace=False)
    #drop : col을 header로 가진 column을 삭제할 것인가
    #append : 기존 index값을 유지할 것인가
    #inplace : df에 바뀐 결과 dataframe을 대입할 것인가
    df.reset_index() #기존 index값이 column으로 바뀌고 default index값으로 바뀜 (0, 1, 2...)
    df.reset_index(drop=True)
    #drop : 기존 index를 삭제할 것인가

    주의해야 할 점은, 두 함수의 parameter에서 같은 drop이라도 col을 drop하는 것과 index를 drop하는 것의 차이가 있다는 것이다.

     

    3. tidy

    tidy = df.melt(id_vars = 'col', value_vars = ['col1', 'col2', 'col3'])

    tidy형태일 때 id_vars에 index를 넣으려고 했는데, 에러가 발생했다. 그래서 df.reset_index()를 먼저 해주어 melt 함수를 적용하였더니 성공적으로 결과가 나왔다.

     

    4. merge

    left.merge(right, how='', on=['col1', 'col2'])
    #how='inner' 일 때 : col1, col2의 조합이 겹치지 않는 subset, 그러니까 NaN이 발생하는 부분은 제외
    #how='outer' 일 때 : col1, col2의 모든 조합에 대해 다른 column의 값을 반환. NaN cell 포함
    #how='left' 일 때 : left에 해당하는 dataframe의 col1, col2 조합을 기준으로, right dataframe의 다른 col 값 반환.
    #how='right' 일 때 : right에 해당하는 dataframe의 col1, col2 조합을 기준으로, left dataframe의 다른 col 값 반환.

     

    5. dataframe 복제하기

    dataframe을 복제해서 하나의 df에 실험을 해보려고 했는데, del df.column 해서 column하나를 없앴더니 원본 dataframe에서도 그 column이 사라졌다.. 찾아보니 .copy()를 이용해야 한다고 한다.

    #df_new = df_original 이렇게 하면 df_new를 바꾸면 df_original도 바뀐다ㅠㅠ
    df_new = df_original.copy()

    이렇게 하면 원본 dataframe을 보존할 수 있다!

     

    6. 특정 열을 추출해서 mean 구하기

    #복잡한 방법
    #df가 이미 선언되어 있다고 가정

    df_mean = pd.DataFrame({'col1' : ['cri1', 'cri1'], 'col2' : [None, None], 'col3' : [None, None]})
    #일단 dataframe을 새로 만들고,

    for col in df_mean.columns.values[1:] : #첫번째 column은 분류기준으로, mean계산에서 제외
        condition1 = (df['col1'] == 'cir1')
        condition2 = (df['col1'] == 'cir2')
        df_mean.loc[0,col] = df[col][condition1].mean()
        df_mean.loc[1,col] = df[col][condition2].mean()

    cri1과 cri2에 대해서, 각 column별 mean 값이 구해진다.

    #더 간단한 방법
    #df가 이미 선언되어 있다고 가정

    df_mean = df.groupby('col1').mean()

    이렇게 간단한걸.. 저렇게 복잡하게 하고있었다니...ㅠ

Designed by Tistory.