ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • File handling
    개발입문/개발환경 세팅 2022. 8. 15. 17:04

     


    다양한 local file 에 대해서 file handling 을 하게 된다. 

    Tabular 표 형식의 데이터인 .csv, .xlsx 를 불러오고, 읽는 과정을 학습한다.


     

     

    File Handling

    # data 초기화 
    header = []
    data = []
    
    # file 읽기
    with open('./data_reading.csv', 'r') as f:
        header = f.readline()
        line = f.readline()
        while line:
            data.append(list(map(float, line.split(','))))
            line = f.readline()

     

    # file 작성하기
    with open('./written_data.csv', 'w') as f:
        f.write(header)
        for line in data:
            f.write(','.join(list(map(str, line))))
            f.write('\n')
    
    # str.join(iterable)
    # Return a string which is the concatenation of the strings in iterable.
    
    # map(function, iterable, ...)
    # Return an iterator that applies function to every item of iterable, yielding the results.

     

    Pandas .csv Handling

    import pandas as pd
    
    # 일반적인 csv 데이터 불러오기
    df = pd.read_csv('data_reading.csv')
    df.head()
    # 큰 규모의 데이터 불러오기
    df2 = pd.read_csv('large_data_with_ID.csv',
                usecols = [0, 1, 5, 10],
                index_col = 'ID',
                nrows = 1000)
    df3 = pd.DataFrame(
        {'A':[1,2,3], 'B':[4,5,6]},
        index = ['a', 'b', 'c']
    )
    
    # 일반적으로 index 를 column 으로 변환한 후 저장
    df3.reset_index().to_csv('./columnindex.csv', index=False)

     

     

    Pandas .xlsx Handling

    df4 = pd.read_excel('월별매출데이터.xlsx', sheet_name = '6월', skiprows=range(6))
    df4 = df.iloc[:, 1:]
    df4.head()
    df5 = pd.DataFrame({'A':[1,2,3,4], 'B':[5,6,7,8]})
    df6 = pd.DataFrame({'A':[9,10,11,12], 'B':[13,14,15,16]})
    
    with pd.ExcelWriter('written_excel.xlsx') as writer:
        df5.to_excel(writer, sheet_name='First', index=False)
        df6.to_excel(writer, sheet_name='Second', index=False)
        
    # pandas.ExcelWriter
    # Class for writing DataFrame objects into excel sheets.

     

     

    Pandas Merge

    on 은 column 기준, index 는 index 기준으로 merge 한다.

    df1 = pd.read_csv('merge_실습_employee_group.csv', engine='python')
    df2 = pd.read_csv('merge_실습_employee_hire_date.csv', engine='python')
    merged_df = pd.merge(df1, df2, on='employee')
    df3 = pd.read_csv('merge_실습_name_hire_date.csv', engine='python')
    merged_df2 = pd.merge(df1, df3, left_on='employee', right_on='name')
    merged_df2.drop('name', axis=1, inplace=True)
    merged_df2.head()

     

    Pandas Concat

    센스, 로그, 거래 데이터 등과 같이 규모가 매우 큰 데이터는 시간과 ID 등에 따라 분할되어 저장된다. 이럴 경우 concat 이 필요하다.

    df1 = pd.DataFrame({'A':[1,2,3,4], 'B':[1,2,3,4]})
    df2 = pd.DataFrame({'A':[5,6,7,8], 'B':[5,6,7,8]})
    
    # 행 단위 concat 일 경우(axis = 0), igonore_index = True
    merged_df = pd.concat([df1, df2], axis=0, ignore_index=True)
    
    # 열 단위 concat 일 경우(axis = 1), igonore_index = False
    merged_df = pd.concat([df1, df2], axis=1, ignore_index=False)

     

    # folder 하나에 있는 file 전체에 대해 concat 1
    merged_df = pd.DataFrame()
    for file in os.listdir("일별 오염 데이터"):
        if '_오염_수준.txt' in file:
            df = pd.read_csv("일별 오염 데이터/" + file, sep = "\t", engine = "python")
            merged_df = pd.concat([merged_df, df], axis = 0, ignore_index = True)
    merged_df.shape
    
    # folder 하나에 있는 file 전체에 대해 concat 2
    merged_df2 = pd.concat([
        pd.read_csv("일별 오염 데이터/" + file, sep = "\t", engine = "python")
        for file in os.listdir("일별 오염 데이터") if '_오염_수준.txt' in file
    ])
    
    merged_df2.shape
    import xlrd
    
    # xlrd.open_workbook(filename) returns An instance of the Book class.
    wb = xlrd.open_workbook('월별매출데이터.xlsx', on_demand=True)
    sheetnames = wb.sheet_names()
    
    merged_df = pd.DataFrame()
    for sn in sheetnames:
        df = pd.read_excel('월별매출데이터.xlsx', sheet_name = sn, skiprows=range(6))
        df = df.iloc[:, 1:]
        merged_df = pd.concat([merged_df, df], axis=0, ignore_index=True)
    merged_df.shape
    
    merged_df2 = pd.concat([
        pd.read_excel('월별매출데이터.xlsx', sheet_name = sn, skiprows=range(6)).iloc[:, 1:]
        for sn in sheetnames 
    ])
    merged_df2.shape

     

    Reference

    xlrd Docs -- 이후에 xlsx 데이터를 다루게 된다면. 

    댓글

Designed by Tistory.