티스토리 뷰
(macOS)[python] Pandas Excel 다루기 - 1 : excel 읽기, 저장, df 분석
jinozpersona 2020. 3. 10. 10:35Intro
- Editor : sublime text3
- python 3.8.1
- pandas 1.0.1
- xlrd 1.2.0 : excel read
- openpyxl 3.0.3 : excel save
pandas에서 excel을 다루기 위해서 xlrd,openpyxl module이 필요하다.
import pandas as pd
df = pd.read_excel('fname',sheet_name='sheet_name')
ImportError: Missing optional dependency 'xlrd'. Install xlrd >= 1.0.0
for Excel support Use pip or conda to install xlrd.
## python3 & modules(pandas, xlrd, openpyxl) version 확인
## python3은 terminal에서, modules은 python3 prompt에서 확인
# python3 version
$ python3 -V
# pandas version
>> import pandas as pd
>> print(pd.__version__)
# xlrd version
>> import xlrd
>> print(xlrd.__version__)
# openpyxl version
>> import openpyxl
>> print(openpyxl.__version__)
1. pd.read_excel 읽기, dataframe.to_excel 저장
# -*- coding: utf-8 -*-
import os
import datetime
import pandas as pd
#### dir base
npath_base = './npsave'
spath_base = './save'
fpath_base = './data'
#### file_name, sheet_name
fnames = ('A_file.xlsx','B_file.xlsx')
sheetA_names = ('sheet1','sheet2','sheet3','sheet4','sheet5','sheet6')
sheetB_names = ('sheet1','sheet2')
#### file_dir_base
fpath_bases = [os.path.join(fpath_base,fname) for fname in fnames]
#### dataframe read
df = pd.read_excel(fpath_bases[0],sheet_name=sheetA_names[0])
print(df)
#### dataframe save
sname = ('result_save.xlsx')
df.to_excel(os.path.join(spath_base,sname),sheet_name=sheetA_names[0])
----*REPL*[python]----
마감월 PO접수일 RFQ 주문번호 ... 공수1
0 2월 2020-01-21 ******** ******** ... NaN
.. ... ... ... ... ... ...
318 NaN NaT ******** NaN ... NaN
[319 rows x 30 columns]
***Repl Closed***
2. dataframe index, columns, dtypes 등 정보 얻기 및 column 선택하기
관계형 데이터베이스 시스템(RDBMS, Relational Database Management System) 용어
- database : table들이 저장된 DB 덩어리, excel 파일 자체 개념
- table : field로 구성된 record 집합, excel의 sheet 개념
- field : 동일 record 집합의 제목, excel의 column이며 1행 제목(label) 개념, pandas에서 column 개념
- index : field의 record 행번호, excel의 row 개념, pandas에서 index 개념
- record : field에 저장된 데이터, excel의 cell 개념이며 행(row),열(col) 즉 B2 cell 주소에 저장된 데이터
python dictionary, DB table, pandas dataframe 비교
dtype dic = {key0 :[data01,data02], key1 :[data11,data12], key2 :[data21,data22]}
DB table = {field0:[record01,record02], field1:[record11,record12], field2:[record21,record22]}
pd dataframe = {col0 :list[str01, str02] , col1 :list[str01, str02], col2 :list[str01, str02]}
# -*- coding: utf-8 -*-
import os
import datetime
import pandas as pd
#### dir base
npath_base = './npsave'
spath_base = './save'
fpath_base = './data'
#### file_name, sheet_name
fnames = ('A_file.xlsx','B_file.xlsx')
sheetA_names = ('sheet1','sheet2','sheet3','sheet4','sheet5','sheet6')
sheetB_names = ('sheet1','sheet2')
#### file_dir_base
fpath_bases = [os.path.join(fpath_base,fname) for fname in fnames]
#### dataframe read
df = pd.read_excel(fpath_bases[0],sheet_name=sheetA_names[0])
#### 1. dataframe index
print(df.index)
#### 2. dataframe columns(=index)
print(df.columns)
#### 3. dataframe dtypes for index
print(df.dtypes)
#### 4. dataframe ['PO접수일'] column 정보
print(df['PO접수일'])
----*REPL*[python]----
#### 1. print(df.index)
RangeIndex(start=0, stop=319, step=1)
#### 2. print(df.columns)
Index(['마감월', 'PO접수일', .... 'cost8'],
dtype='object')
#### 3. print(df.dtypes)
마감월 object
PO접수일 datetime64[ns]
RFQ object
....
구분 object
수량 int64
....
dtype: object
#### 4. print(df['PO접수일'])
0 2020-01-21
1 2020-01-21
...
317 NaT
318 NaT
Name: PO접수일, Length: 319, dtype: datetime64[ns]
***Repl Closed***
3. dataframe index(=column,field) 다루기
# -*- coding: utf-8 -*-
import os
import datetime
import pandas as pd
#### dir base
npath_base = './npsave'
spath_base = './save'
fpath_base = './data'
#### file_name, sheet_name
fnames = ('A_file.xlsx','B_file.xlsx')
sheetA_names = ('sheet1','sheet2','sheet3','sheet4','sheet5','sheet6')
sheetB_names = ('sheet1','sheet2')
#### file_dir_base
fpath_bases = [os.path.join(fpath_base,fname) for fname in fnames]
#### dataframe read
df = pd.read_excel(fpath_bases[0],sheet_name=sheetA_names[0])
#### 1. index list 읽기
index_list = df.columns
print(index_list, type(index_list))
#### 2. df.loc 이용하여 index와 record 읽기
sel_table_loc = df.loc[:3,['마감월','PO접수일']]
print(sel_table_loc, type(sel_table_loc))
#### 3. df.iloc 이용하여 index와 record 읽기
sel_col = df.iloc[:,-8:-1]
print(sel_col, type(sel_col))
sel_row = df.iloc[0:3,:]
print(sel_row, type(sel_row))
----*REPL*[python]----
#### index list 읽기
Index(['마감월', 'PO접수일', ... 'cost6', 'cost7', 'cost8'],
dtype='object') <class 'pandas.core.indexes.base.Index'>
#### 2. df.loc 이용하여 index와 record 읽기
마감월 PO접수일
0 2월 2020-01-21
1 2월 2020-01-21
2 2월 2020-02-03
3 2월 2020-02-03 <class 'pandas.core.frame.DataFrame'>
#### 3. df.iloc 이용하여 index와 record 읽기
cost1 cost2 cost3 cost4 cost5 cost6 cost7
0 NaN 1480.0 135000.0 15000.0 NaN 6700.0 NaN
1 NaN 1480.0 135000.0 15500.0 NaN 6700.0 NaN
.. ... ... ... ... ... ... ...
317 NaN NaN NaN NaN NaN NaN NaN
318 NaN NaN NaN NaN NaN NaN NaN
[319 rows x 7 columns] <class 'pandas.core.frame.DataFrame'>
마감월 PO접수일 ... cost8
0 2월 2020-01-21 2403463-1 5374765-1 ... NaN 6700.0 NaN NaN
1 2월 2020-01-21 2403463-1 5374756-1 ... NaN 6700.0 NaN NaN
2 2월 2020-02-03 2403467-1 5379114-1 ... NaN 6700.0 NaN 130.0
[3 rows x 30 columns] <class 'pandas.core.frame.DataFrame'>
***Repl Closed***
'python > Numpy, Pandas' 카테고리의 다른 글
(macOS)[python] Numpy Excel 다루기 - 2 : excel .xlsx read (0) | 2021.01.22 |
---|---|
(macOS)[python] Numpy Excel 다루기 - 1 : .csv 읽기 (0) | 2021.01.13 |
(macOS)[python] Pandas Excel 다루기 - 3 : .csv 파일 읽기 (0) | 2021.01.13 |
(macOS)[python] Regression Analysis with Pandas (0) | 2021.01.12 |
(macOS) .DS_Store 삭제 (0) | 2020.02.28 |
- Total
- Today
- Yesterday
- Pandas
- github
- 확진
- pyserial
- 자가격리
- 코로나
- template
- Raspberry Pi
- sublime text
- Python
- DAQ
- vscode
- r
- server
- 코로나19
- COVID-19
- Django
- raspberrypi
- 라즈베리파이
- CSV
- git
- Templates
- ERP
- DS18B20
- SSH
- arduino
- Regression
- MacOS
- analysis
- Model
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |