일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- stack&que
- Bruteforce
- stateless
- pytest
- codecov
- ORM
- Stack
- TDD
- Unit Testing
- Python
- 백준
- Programmers
- algorithm
- Q objects
- utils
- combinations
- Git
- dictionary
- SQL
- greedy
- stateful
- permutations
- AWS
- Gunicorn
- postreSQL
- Query
- ws
- Django
- HTTP 완벽 가이드
- was
- Today
- Total
해피 코딩!
python - pandas를 활용한 Excel 저장하기 본문
참고 사이트
- pandas docs
- Pandas - API 레퍼런스
- Pandas에서 Excel파일을 데이터프레임화로 변경 (pandas.read_excel)
- 10 minutes to pandas 번역 블로그 글
- Pandas 기초
- pandas 행과 열의 삭제
본 내용은 작성자가 python의 pandas 라이브러리를 활용하여, Excel 파일의 데이터를 저장한 내용을 정리하고자 다양한 블로그와 문서를 읽고 내용을 취합하였습니다.
대부분의 내용의 출처는 참고 사이트 를 통해 가져왔으며 자세한 내용은 위 링크를 통해 확인 부탁드립니다.
개인적인 추천으로 판다스의 사용이 익숙하지 않으신 분들은Jupyter Notebook 을 활용하여 따라해보시길 권장 합니다.
파일은 Django
의 Form
을 활용하여 업로드하는 형태로 구현했습니다.
목차 순서 - 클릭하면 이동합니다.
- 초기 세팅
- 파일 열기
- 헤더
- keep_default_na
- Index_col
- sheet_name
- usecols
- 딕셔너리를 활용한 여러 시트를 넣는 방법
- 데이터 디스플레이
- 데이터 입출력
- 행을 통한 필드 구분
- 열 방향의 인덱스 .columns
- 라벨의 이름을 이용하여 선택하기 :
.loc
- 특정 행 범위를 통한 슬라이싱
- 특정 로우 값, 컬럼 값에 대하여 가져오기
- 컬럼 순서 변경하기
- 인덱스 순서 변경
- 위치를 기준으로 데이터 선택하여 가져오기
- 데이터 선택 (selection)
- Iterrows를 활용한 열들의 순회
- Pandas DataFrame으로 변경하기
- 컬럼 추가
- 컬럼 삭제
- 조건을 이용하여 가져오기
- 필터링 : isin
- 함수를 사용하여 값 변환하기
- 조건문을 활용한 컬럼 값 확인
초기 세팅에 도움이 되는 설정
파일 열기
import pandas import numpy df = pandas.read_excel('file_name.xlsx')
header
header
는 해당 열 위치를 조정하여 해당 행의 이름을 header
의 데이터로 지정할 수 있는 파라미터
입니다.header
위의 데이터들은 전부 제외되기 때문에 주의하기 바랍니다.
df = pandas.read_excel('file_name.xlsx', header=1)
keep_default_na
keep_default_na
는 엑셀 셀이 공백일 경우, 자동으로 NaN
으로 지정할 것 인가 아닌가를 세팅할 수 있습니다. 기존 Default 값은 True
기 때문에
기존의 출력 값이 없을 경우에는 Nan
으로 출력이 된다. 하지만 이런 NaN
을 원하지 않는 경우에는 False
값
지정을 사용하여 공백의 출력 값을 문자열 공백으로 출력할 수 있습니다.
df = pandas.read_excel('file_name.xlsx', header=1, keep_default_na=False)
Index_col
index_col
은 행의 몇 번째 행을 데이터 프레임의 인덱스로 설정하여 수치로 활용할 수 있는지에 대한 파라미터이며, 따로 설정하지 않는다면 각 행의 번호 값이 인덱스로 설정이 됩니다.
df = pandas.read_excel('file_name.xlsx', header=1, index_col=1, keep_default_na=False)
sheet_name
엑셀 파일에 있는 각 시트별로 접근할 수 있는 파라미터 설정 입니다.
df = pandas.read_excel('file_name.xlsm', header=1, sheet_name='sheet1', index_col=1,
keep_default_na=False)
usecols
usecols
는 엑셀 파일의 특정 행들을 지정하여 꺼내올 수 있는 파라미터 입니다. 파이썬의 리스트 자료형의 슬라이싱과 비슷한 형태로도 사용할 수 있으며 특정 컬럼을 지정할 수 도
있습니다.
df = pandas.read_excel('1월 조립 계획서 Rev01_메크로.xlsm', header=1, sheet_name='BOM', index_col=0,
keep_default_na=False, usecols='B:X' )[:303]
딕셔너리를 활용한 여러 시트를 넣는 방법
work_sheet = ['sheet1', 'sheet2', 'sheet3'] cols = ['B:Y', 'A, C:E', 'B:X'] headers = [1, 2, 3, 4] # 두 개인 경우에는 ZIP을 이용한다. lst = [ws, cols, headers] dic = {} reps = len(work_sheet) for index in range(reps): name = lst[0][index] sheet_name_var = lst[0][index] use_cols_var = lst[1][index] header_var = lst[2][index] dic[name] = pandas.read_excel('file_name.xlsm', header=header_var, sheet_name=sheet_name_var, keep_default_na=False, usecols=use_cols_var, )
각 값들에 대한 접근은 dic['sheet_name']
또는 dic.get('sheet_name')
을 활용하시면 됩니다.
dic.get('material_number')
와 같이 사용하면 됩니다.
데이터 디스플레이
display(df) # 또는 df
데이터 입출력
행을 통한 필드 구분
print(list(df.columns))
열 방향의 인덱스 .columns
df.columns
특정 행
범위를 가져올 때 사용하는 리스트 슬라이싱
리스트의 슬라이싱을 이용하여 가져온다
df["제품번호"][:42]
라벨의 이름을 이용하여 선택하기 :
.loc
라벨의 이름을 이용하여 선택할 수 있는 .loc
방법도 있습니다.
첫 번째 인덱스의 값에 해당하는 모든 칼럼의 값 가져오기,
df.loc[0]
특정 로우 값, 컬럼 값에 대하여 가져오기
컬럼 A
와 컬럼 B
에 대한 모든 값 가져오기
df.loc[5:10, ['col_1_field_name', 'col_4_field_name']]
컬럼 순서 변경하기
df = pandas.DataFrame(df, columns=['col_4_field_name', 'col_2_field_name', 'col_8_field_name'])
인덱스 순서 변경
df = df.reindex(index=[4, 0])
위치를 기준으로 데이터 선택하여 가져오기
loc에서 i를 합친 문법이며 큰 차이는 없다. 리스트에서 index 의 의미를 가진 i
값 이다.
df.iloc[3:5, 1:6] df.iloc[[1, 2, 4, 6], [3, 6]]
데이터 선택 (selection)
데이터 프레임 자체가 갖고 있는 []
슬라이싱 기능을 이용하는 방법 입니다.
특정 컬럼
의 값들만 가지고 오고 싶다면
df['A']
와 같은 형태로 입력하며 이는 df.A
와 동일합니다. 리턴되는 Series의 자료구조를 가지고 있습니다.
# 각 행에 해당하는 데이터 꺼내오기 df["제품번호"]
Iterrows를 활용한 열들의 순회
python의 enumerate처럼 각 값들을 순회하면서 index 에 대한 값 까지 함께 알 수 있다.
이 때 index의 값을 index_col
을 통해 지정하였다면, 해당하는 값이 인덱스 값에 해당하며 그렇지 않다면 기본 행의 값으로 적용이 된다.
row의 값들은 각 행의 값을 통해 접근하면 특정 행과 열에 대한 엑셀 데이터를 꺼내올 수 있다.
for index, row in df.iterrows(): print(index) print(index) print(row['col1_name'], print(row['col2_name'], print(row['col3_name'], print(row['col4_name'],
Pandas DataFrame으로 변경하기
df = pandas.DataFrame(df, columns=['BOMLevel', '자재명', '자재번호', '자재규격'])
추가 & 삭제
컬럼 추가
import numpy df['c'] = numpy.nan
컬럼 삭제
del을 이용한 삭제del df['colB']
drop을 이용한 삭제new_df = df.drop("colA", axis=1)
조건 활용하기
조건을 이용하여 가져오기
특정한 열의 값들을 기준으로 조건을 만들어 해당 조건에 만족하는 행들만 선택할 수 있는 방법이 있습니다.
df[df.총소요량 > 1]
각 값을 기준으로 테이블 전체에서 정할 수 있습니다.
다음은 양수 값이 다 보여지고 나머지 값들 (0 혹은 음수)가 보여지는 예제 입니다.
df[df.총소요량 >0] # 0보다 작은 값은 NaN으로 보여집니다.
필터링 - isin
isin()
메서드를 제공한다. 해당 메서드는 해당 열에 들어있는 값을 기준으로 필터링 한다.
df[df['재고자산분류'].isin(['제품'])]
함수를 사용하여 값 변환하기
def change_quantity_of_row(row): if row > 0.5: return 'up' else: return 'down' df['총소요량'] = df.총소요량.apply(change_quantity_of_row) df
조건문을 활용하여 컬럼이 있는지 확인하기
if not '품번1' in list(dic['BOM'].columns):
'Python' 카테고리의 다른 글
컴파일러와 인터프리터 언어 (0) | 2021.05.16 |
---|---|
PyCon Korea 2018 - 인생은 짧아요, 엑셀 대신 파이썬 [이승준 발표자님] (0) | 2021.01.10 |