-
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 데이터를 다루게 된다면.
'개발입문 > 개발환경 세팅' 카테고리의 다른 글
Google Colab 에서 Github 로 코드 저장하기 (0) 2022.08.15 Jupyter Notebook 에서 Pip 를 통해 패키지 설치하는 방법 (0) 2020.08.19 cURL 입문, 공부자료 정리 (0) 2020.08.16 이클립스에서 Servlet 배포환경 구축하기 (0) 2017.02.13 Eclipse 에서 Web Application 개발환경 구축하기 (0) 2017.02.13