Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 판다스 데이터정렬
- MachineLearning
- NLP
- 판다스
- 파이썬웹개발
- python 정렬
- pandas
- 챗gpt
- 파이토치
- 비지도학습
- konlpy
- sklearn
- 딥러닝
- deeplearning
- 파이썬
- 랭체인
- pytorch
- Python
- OpenAIAPI
- 사이킷런
- 자연어분석
- fastapi
- programmablesearchengine
- fastapi #파이썬웹개발
- 머신러닝
- fastapi #python웹개발
- chatGPT
- HTML
- langchain
- 파이토치기본
Archives
- Today
- Total
Data Navigator
[pandas] concat, os.listdir, openpyxl을 이용한 데이터 통합 본문
concat, os.listdir, openpyxl을 이용한 데이터 통합¶
1. merge와 concat의 차이¶
2.os.listdir: path상에 있는 모든 파일명을 리스트 형태로 변환¶
3.openpyxl를 이용한 엑셀시트 목록 가져오기¶
In [2]:
import os
import pandas as pd
os.chdir(r"D:/bigdata/jupyter/data_preprocessing/1. 데이터 핸들링\데이터/")
concat 기초¶
In [4]:
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]})
In [5]:
# df1과 df2를 axis = 0 (행방향으로 붙임-아래)
# 행방향으로 붙일 때는 인덱스가 중복될 수 있으므로 ignore_index = True로 초기화 해주는 것이 좋음
merged_df = pd.concat([df1,df2], axis = 0, ignore_index = True)
merged_df
Out[5]:
A | B | |
---|---|---|
0 | 1 | 1 |
1 | 2 | 2 |
2 | 3 | 3 |
3 | 4 | 4 |
4 | 5 | 5 |
5 | 6 | 6 |
6 | 7 | 7 |
7 | 8 | 8 |
In [12]:
df1 = pd.DataFrame({'A':[1,2,3,4], "B":[1,2,3,4]})
df2 = pd.DataFrame({'C':[5,6,7,8], "D":[5,6,7,8]})
In [13]:
# df1과 df2를 axis = 1 (열방향으로 붙임-옆)
# 행방향으로 붙일 때 컬럼명은 중요하므로 ignore_index = False로 해서 유지
merged_df = pd.concat([df1,df2], axis = 1, ignore_index = False)
merged_df
Out[13]:
A | B | C | D | |
---|---|---|---|---|
0 | 1 | 1 | 5 | 5 |
1 | 2 | 2 | 6 | 6 |
2 | 3 | 3 | 7 | 7 |
3 | 4 | 4 | 8 | 8 |
concat을 이용하여 여러 csv 파일 합치기¶
In [15]:
df1 = pd.read_csv('일별 오염 데이터/2004-03-14_오염_수준.txt', sep='\t', engine="python")
df2 = pd.read_csv('일별 오염 데이터/2004-03-20_오염_수준.txt', sep='\t', engine="python")
In [16]:
df1.head()
Out[16]:
Date | Time | CO(GT) | PT08.S1(CO) | NMHC(GT) | C6H6(GT) | PT08.S2(NMHC) | NOx(GT) | PT08.S3(NOx) | NO2(GT) | PT08.S4(NO2) | PT08.S5(O3) | T | RH | AH | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2004-03-14 | 00:00:00 | 2.9 | 1533.50 | 93.0 | 10.963458 | 1013.00 | 190.0 | 888.50 | 129.0 | 1610.75 | 1534.75 | 13.95 | 53.600000 | 0.849772 |
1 | 2004-03-14 | 01:00:00 | 2.8 | 1483.50 | 131.0 | 11.860179 | 1044.75 | 174.0 | 879.75 | 119.0 | 1624.25 | 1529.75 | 14.65 | 51.500000 | 0.853623 |
2 | 2004-03-14 | 02:00:00 | 2.5 | 1366.75 | 92.0 | 8.624679 | 924.50 | 128.0 | 952.50 | 104.0 | 1543.00 | 1337.00 | 12.55 | 58.900001 | 0.853740 |
3 | 2004-03-14 | 03:00:00 | 2.4 | 1344.00 | 132.0 | 9.737786 | 967.75 | -200.0 | 920.50 | -200.0 | 1619.75 | 1278.25 | 11.65 | 63.425000 | 0.867449 |
4 | 2004-03-14 | 04:00:00 | -200.0 | 1129.50 | 56.0 | 5.191654 | 773.00 | 70.0 | 1130.25 | 82.0 | 1451.75 | 1050.50 | 12.10 | 61.100001 | 0.860316 |
In [17]:
df2.head()
Out[17]:
Date | Time | CO(GT) | PT08.S1(CO) | NMHC(GT) | C6H6(GT) | PT08.S2(NMHC) | NOx(GT) | PT08.S3(NOx) | NO2(GT) | PT08.S4(NO2) | PT08.S5(O3) | T | RH | AH | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2004-03-20 | 00:00:00 | 1.7 | 1126.75 | -200.0 | 5.791192 | 802.00 | 104.0 | 1064.00 | 92.0 | 1446.50 | 837.00 | 13.775 | 57.95 | 0.908544 |
1 | 2004-03-20 | 01:00:00 | 1.6 | 1090.25 | -200.0 | 5.191654 | 773.00 | NaN | 1105.25 | 83.0 | 1428.50 | 761.00 | 13.900 | 55.95 | 0.884207 |
2 | 2004-03-20 | 02:00:00 | 1.3 | 1017.00 | -200.0 | 4.123187 | 717.50 | 74.0 | 1181.75 | 81.0 | 1382.25 | 650.25 | 13.875 | 55.55 | 0.876488 |
3 | 2004-03-20 | 03:00:00 | 1.3 | 997.25 | -200.0 | 3.410629 | 677.00 | -200.0 | 1252.25 | -200.0 | 1358.50 | 590.75 | 13.825 | 55.10 | 0.866620 |
4 | 2004-03-20 | 04:00:00 | -200.0 | 944.75 | -200.0 | 2.908548 | 646.25 | 44.0 | 1308.00 | 55.0 | 1331.50 | 505.00 | 13.800 | 54.60 | 0.857388 |
1.for문을 이용해 데이터 프레임을 만들고 합치기¶
In [22]:
# 일별 오염 데이터 폴더에 있는 파일들을 리스트 형태로 읽기
os.listdir("일별 오염 데이터")
Out[22]:
['2004-03-11_오염_수준.txt', '2004-03-12_오염_수준.txt', '2004-03-13_오염_수준.txt', '2004-03-14_오염_수준.txt', '2004-03-15_오염_수준.txt', '2004-03-16_오염_수준.txt', '2004-03-17_오염_수준.txt', '2004-03-18_오염_수준.txt', '2004-03-19_오염_수준.txt', '2004-03-20_오염_수준.txt', '2004-03-21_오염_수준.txt', '2004-03-22_오염_수준.txt', '2004-03-23_오염_수준.txt', '2004-03-24_오염_수준.txt', '2004-03-25_오염_수준.txt', '2004-03-26_오염_수준.txt', '2004-03-27_오염_수준.txt', '2004-03-28_오염_수준.txt', '2004-03-29_오염_수준.txt', '2004-03-30_오염_수준.txt', '2004-03-31_오염_수준.txt', 'desktop.ini']
In [23]:
merged_df = pd.DataFrame() #빈 데이터 프레임 생성
for file in os.listdir("일별 오염 데이터"):
if '오염_수준.txt' in file: #오염_수준.txt로 끝나는 파일들을 읽어 옴
df = pd.read_csv("일별 오염 데이터/" + file, sep="\t", engine='python')
merged_df = pd.concat([merged_df, df], axis = 0, ignore_index=True)
In [20]:
merged_df.head()
Out[20]:
Date | Time | CO(GT) | PT08.S1(CO) | NMHC(GT) | C6H6(GT) | PT08.S2(NMHC) | NOx(GT) | PT08.S3(NOx) | NO2(GT) | PT08.S4(NO2) | PT08.S5(O3) | T | RH | AH | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2004-03-11 | 00:00:00 | 1.2 | 1185.00 | 31.0 | 3.624399 | 689.50 | 62.0 | 1461.75 | 77.0 | 1332.75 | 732.50 | 11.325 | 56.775000 | 0.760312 |
1 | 2004-03-11 | 01:00:00 | 1.0 | 1136.25 | 31.0 | 3.326677 | 672.00 | 62.0 | 1453.25 | 76.0 | 1332.75 | 729.50 | 10.675 | 60.000000 | 0.770238 |
2 | 2004-03-11 | 02:00:00 | 0.9 | 1094.00 | 24.0 | 2.339416 | 608.50 | 45.0 | 1579.00 | 60.0 | 1276.00 | 619.50 | 10.650 | 59.674999 | 0.764819 |
3 | 2004-03-11 | 03:00:00 | 0.6 | 1009.75 | 19.0 | 1.696658 | 560.75 | -200.0 | 1705.00 | -200.0 | 1234.75 | 501.25 | 10.250 | 60.200001 | 0.751657 |
4 | 2004-03-11 | 04:00:00 | -200.0 | 1011.00 | 14.0 | 1.293620 | 526.75 | 21.0 | 1817.50 | 34.0 | 1196.75 | 445.25 | 10.075 | 60.474999 | 0.746495 |
In [21]:
merged_df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 504 entries, 0 to 503 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 504 non-null object 1 Time 504 non-null object 2 CO(GT) 504 non-null float64 3 PT08.S1(CO) 502 non-null float64 4 NMHC(GT) 502 non-null float64 5 C6H6(GT) 494 non-null float64 6 PT08.S2(NMHC) 500 non-null float64 7 NOx(GT) 498 non-null float64 8 PT08.S3(NOx) 497 non-null float64 9 NO2(GT) 498 non-null float64 10 PT08.S4(NO2) 498 non-null float64 11 PT08.S5(O3) 503 non-null float64 12 T 504 non-null float64 13 RH 504 non-null float64 14 AH 504 non-null float64 dtypes: float64(13), object(2) memory usage: 59.2+ KB
2.list comprehension을 이용한 데이터 통합¶
In [25]:
merged_df = pd.concat([pd.read_csv("일별 오염 데이터/" + file, sep="\t", engine="python")
for file in os.listdir("일별 오염 데이터") if '오염_수준.txt' in file])
In [26]:
merged_df.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 504 entries, 0 to 23 Data columns (total 15 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Date 504 non-null object 1 Time 504 non-null object 2 CO(GT) 504 non-null float64 3 PT08.S1(CO) 502 non-null float64 4 NMHC(GT) 502 non-null float64 5 C6H6(GT) 494 non-null float64 6 PT08.S2(NMHC) 500 non-null float64 7 NOx(GT) 498 non-null float64 8 PT08.S3(NOx) 497 non-null float64 9 NO2(GT) 498 non-null float64 10 PT08.S4(NO2) 498 non-null float64 11 PT08.S5(O3) 503 non-null float64 12 T 504 non-null float64 13 RH 504 non-null float64 14 AH 504 non-null float64 dtypes: float64(13), object(2) memory usage: 63.0+ KB
3. openpyxl 과 concat을 이용한 엑셀 시트 통합¶
In [33]:
import openpyxl
wb = openpyxl.load_workbook('월별매출데이터.xlsx')
sheetnames = wb.sheetnames
sheetnames
Out[33]:
['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']
for문과 concat을 이용한 엑셀 시트 통합¶
In [38]:
merged_df = pd.DataFrame()
for sn in sheetnames:
df = pd.read_excel("월별매출데이터.xlsx", sheet_name=sn, skiprows = range(6), engine="openpyxl")
df = df.iloc[:,1:] # 첫 번째 칼럼이 불필요하므로 제거
merged_df = pd.concat([merged_df, df], axis = 0, ignore_index=True)
merged_df
Out[38]:
일자 | 지점 | 품명 | 수량 | 주문인 ID | 수령 주소 | 주문 상태 | 결제 수단 | |
---|---|---|---|---|---|---|---|---|
0 | 2018.1.1 | 지점1 | 제품B | 3 | C-168 | 서울특별시 동작구 흑석동 | 주문완료 | 인터넷뱅킹 |
1 | 2018.1.1 | 지점2 | 제품F | 8 | C-87 | 서울특별시 서대문구 신촌동 | 배송완료 | 신용카드 |
2 | 2018.1.1 | 지점4 | 제품B | 2 | C-158 | 서울특별시 종로구 종로5가 | 배송완료 | 휴대폰결제 |
3 | 2018.1.1 | 지점3 | 제품D | 7 | C-307 | 서울특별시 서대문구 냉천동 | 주문완료 | 휴대폰결제 |
4 | 2018.1.1 | 지점2 | 제품E | 9 | C-342 | 서울특별시 종로구 묘동 | 배송완료 | 인터넷뱅킹 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
18224 | 2018-12-31 | 지점1 | 제품F | 6 | C-59 | 서울특별시 성북구 보문동3가 | 배송중 | 신용카드 |
18225 | 2018-12-31 | 지점2 | 제품D | 9 | C-287 | 서울특별시 중구 의주로1가 | 배송중 | 인터넷뱅킹 |
18226 | 2018-12-31 | 지점4 | 제품D | 5 | C-175 | 서울특별시 종로구 명륜1가 | 주문완료 | 인터넷뱅킹 |
18227 | 2018-12-31 | 지점1 | 제품B | 4 | C-17 | 서울특별시 영등포구 양평동3가 | 주문완료 | 인터넷뱅킹 |
18228 | 2018-12-31 | 지점2 | 제품D | 4 | C-156 | 서울특별시 중구 을지로2가 | 배송중 | 인터넷뱅킹 |
18229 rows × 8 columns
List comprehension을 이용한 엑셀 시트 통합¶
In [40]:
merged_df = pd.concat([pd.read_excel("월별매출데이터.xlsx", sheet_name = sn, skiprows = range(6), engine="openpyxl").iloc[:,1:]
for sn in sheetnames])
merged_df
Out[40]:
일자 | 지점 | 품명 | 수량 | 주문인 ID | 수령 주소 | 주문 상태 | 결제 수단 | |
---|---|---|---|---|---|---|---|---|
0 | 2018.1.1 | 지점1 | 제품B | 3 | C-168 | 서울특별시 동작구 흑석동 | 주문완료 | 인터넷뱅킹 |
1 | 2018.1.1 | 지점2 | 제품F | 8 | C-87 | 서울특별시 서대문구 신촌동 | 배송완료 | 신용카드 |
2 | 2018.1.1 | 지점4 | 제품B | 2 | C-158 | 서울특별시 종로구 종로5가 | 배송완료 | 휴대폰결제 |
3 | 2018.1.1 | 지점3 | 제품D | 7 | C-307 | 서울특별시 서대문구 냉천동 | 주문완료 | 휴대폰결제 |
4 | 2018.1.1 | 지점2 | 제품E | 9 | C-342 | 서울특별시 종로구 묘동 | 배송완료 | 인터넷뱅킹 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
1504 | 2018-12-31 | 지점1 | 제품F | 6 | C-59 | 서울특별시 성북구 보문동3가 | 배송중 | 신용카드 |
1505 | 2018-12-31 | 지점2 | 제품D | 9 | C-287 | 서울특별시 중구 의주로1가 | 배송중 | 인터넷뱅킹 |
1506 | 2018-12-31 | 지점4 | 제품D | 5 | C-175 | 서울특별시 종로구 명륜1가 | 주문완료 | 인터넷뱅킹 |
1507 | 2018-12-31 | 지점1 | 제품B | 4 | C-17 | 서울특별시 영등포구 양평동3가 | 주문완료 | 인터넷뱅킹 |
1508 | 2018-12-31 | 지점2 | 제품D | 4 | C-156 | 서울특별시 중구 을지로2가 | 배송중 | 인터넷뱅킹 |
18229 rows × 8 columns
'Python > Pandas' 카테고리의 다른 글
[pandas] 판다스 DataFrame정렬 sort_values() (0) | 2021.04.13 |
---|---|
[pandas] Series 데이터 정렬하기 sort_values(), .value_counts(), .unique() (0) | 2021.04.12 |
[pandas] groupby를 이용한 조건부 통계 (0) | 2021.04.10 |
[pandas] pivot_table을 이용한 조건별 변수별 통계량 파악 (0) | 2021.04.09 |
[pandas] merge로 데이터 프레임 합치기 (0) | 2021.04.07 |