컴퓨터/Python

pandas 엑셀투파이썬 dataframe 속성

풍경소리^^ 2023. 8. 4. 15:38

https://www.youtube.com/playlist?list=PLrpXwtuxGqcIeV2DdenqkliloxifMBmyA 

 

모든 판다스 강의 모아보기

 

www.youtube.com

pandas_exceltopython.ipynb
2.34MB
01vlookup.xlsx
0.01MB

 

import pandas as pd

file = "01vlookup.xlsx"
df1 = pd.read_excel(file,sheet_name="Sheet1", 
                    header=0, 
#                     names=['이름','제품'],
                    index_col=None,
                    usecols="A:B",# 떨어진열 usecols="A:B,F:G",
                    skiprows=3)

# df1 = pd.read_excel(file, sheet_name=1) # 0,1,2 두번째 시트 데이터 첫번째 행부터 있음
# df1

# print(df1)
#      이름     제품
# 0   백철민   아이스티
# 1   박태인  레몬에이드
# 2   국지용  아메리카노
# 3   강민석  레몬에이드
# 4   박훈정   아이스티
# 5   박상남  아메리카노
# 6   김대현  레몬에이드
# 7   서지후  바닐라라떼
# 8   구교환  아메리카노
# 9   박유환   아이스티
# 10  배호근   얼그레이
# 11  박종환    유자차
# 12  강형석  바닐라라떼

# print(df1.info())
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 13 entries, 0 to 12
# Data columns (total 2 columns):
#  #   Column  Non-Null Count  Dtype
# ---  ------  --------------  -----
#  0   이름      13 non-null     object
#  1   제품      13 non-null     object
# dtypes: object(2)
# memory usage: 340.0+ bytes
# None

# print(df1.describe())
#          이름    제품
# count    13    13
# unique   13     6
# top     백철민  아이스티
# freq      1     3

# print(df1['이름'].describe)
# <bound method NDFrame.describe of 0     백철민
# 1     박태인
# 2     국지용
# 3     강민석
# 4     박훈정
# 5     박상남
# 6     김대현
# 7     서지후
# 8     구교환
# 9     박유환
# 10    배호근
# 11    박종환
# 12    강형석
# Name: 이름, dtype: object>

# print(df1['이름'])
# 0     백철민
# 1     박태인
# 2     국지용
# 3     강민석
# 4     박훈정
# 5     박상남
# 6     김대현
# 7     서지후
# 8     구교환
# 9     박유환
# 10    배호근
# 11    박종환
# 12    강형석
# Name: 이름, dtype: object

# print(df1.count())
# 이름    13
# 제품    13
# dtype: int64

# print(df1['이름'].count())
# 13

# print(df1['이름'][0])
# 백철민

# print(df1.values)
# [['백철민' '아이스티']
#  ['박태인' '레몬에이드']
#  ['국지용' '아메리카노']
#  ['강민석' '레몬에이드']
#  ['박훈정' '아이스티']
#  ['박상남' '아메리카노']
#  ['김대현' '레몬에이드']
#  ['서지후' '바닐라라떼']
#  ['구교환' '아메리카노']
#  ['박유환' '아이스티']
#  ['배호근' '얼그레이']
#  ['박종환' '유자차']
#  ['강형석' '바닐라라떼']]

# print(df1.index)
# RangeIndex(start=0, stop=13, step=1)

# print(df1.columns)
# Index(['이름', '제품'], dtype='object')

# print(df1.shape) # (행,열)
# (13, 2)

# print(df1['제품'].unique()) # 중복값 제외
# ['아이스티' '레몬에이드' '아메리카노' '바닐라라떼' '얼그레이' '유자차']

# print(df1['제품'].nunique())
# 6

# df = pd.DataFrame(df1,index=[0,2,4])
# print(df)
#     이름     제품
# 0  백철민   아이스티
# 2  국지용  아메리카노
# 4  박훈정   아이스티

02multivlookup.xlsx
0.04MB
03countifsumif.xlsx
0.03MB
04결측치.xlsx
0.04MB
05열다루기.xlsx
0.02MB
06엑셀의if조건문.xlsx
0.03MB
07엑셀의피벗테이블.xlsx
0.08MB
08인덱싱과슬라이싱.xlsx
0.01MB
09sort_values정렬.xlsx
0.07MB
10broadcasting.xlsx
0.02MB
11booleanindexingfilter.xlsx
0.03MB
12indexcolumns.xlsx
0.01MB
13unpivot.xlsx
0.01MB
14unpivot.xlsx
0.02MB
15concatxlsx.xlsx
0.03MB
16duplicates.xlsx
0.01MB
17merge.xlsx
0.03MB
18rank.xlsx
0.02MB
bokeh_plot.png
0.04MB
train.csv
0.06MB
unpivot.jpg
0.10MB
unpivot01.xlsx
0.01MB
unpivot02.xlsx
0.16MB
하트.png
0.06MB
merge_asof.jpg
0.11MB
rename1.jpg
0.14MB
merge.jpg
0.10MB

 

 

 

데이터 뒤에 공백있는 경우

import openpyxl

wb = openpyxl.load_workbook(file) #워크북 객체 생성
ws = wb["Sheet1"] #시트 객체 생성
block_skiprow = 3
block_maxrow = block_skiprow # 초기값 = 0
for cell in ws['F'][block_skiprow+1:]:
#     print(cell)
    if cell.value is not None:
        block_maxrow += 1
    else:
        break
block_nrows = block_maxrow - block_skiprow

df2 = pd.read_excel(file,sheet_name="Sheet1", 
                    header=0, 
                    names=['제품','가격'],
                    index_col=None,
                    usecols="F:G",
#                     dtype={'제품':str,'가격':str},
                    skiprows=3,
                    nrows=block_nrows)
# df2 = df2.dropna()
# df2 = df2.astype({'가격':int})
df2

특정 범위 지우기 / 특정 범위에 덮어쓰기

import openpyxl
from openpyxl.utils.cell import column_index_from_string
from openpyxl.utils import get_column_letter
import pandas as pd

# from openpyxl.styles import colors
# from openpyxl.styles import Color
# from openpyxl.styles import PatternFill

# file = r"B:\python\jupyternotebook\pandas_엑셀투파이썬\01vlookup.xlsx"
workbook = openpyxl.load_workbook(file)
sheet = workbook['Sheet1']

# 기존 데이터 지우기
# 열'J'에서 'L'까지의 모든 열을 지정
start_column = 'J'
end_column = 'L'
start_row = 4 # 제목열 제외하고 데이터 시작행 0,1,2,3,4,5

# 특정 범위 지우기
for column_letter in range(column_index_from_string(start_column), column_index_from_string(end_column) + 1):
    column_cells = sheet[get_column_letter(column_letter)][start_row:]
    
    # 열 범위의 모든 셀을 확인하고 데이터가 있는 경우 삭제
    for cell in column_cells:
        if cell.value is not None:
            cell.value = None
#             cell.fill = openpyxl.styles.PatternFill(fill_type='solid', fgColor=Color('FFFF00'))
#             cell.fill = openpyxl.styles.PatternFill(fill_type=None)

# 변경 내용을 파일에 저장
workbook.save(file)

# 파일 닫기
workbook.close()

# 열 문자를 숫자(인덱스)로 변환
# def column_letter_to_number(column_letter):
#     result = 0
#     for char in column_letter:
#         result = result * 26 + (ord(char) - ord('A'))
#     return result
# column_number = column_letter_to_number('A')

# column_number = column_letter_to_number('A')
# column_letter = 'A'
# print(ord(column_letter) - ord('A'))

# 특정 범위에 쓰기
with pd.ExcelWriter(file, mode='a', engine='openpyxl', if_sheet_exists='overlay') as w:
#     df3.to_excel(w, sheet_name='Sheet1', index=False, header=False, startcol=column_letter_to_number(start_column), startrow=start_row) # 제목열 제외하고 데이터 시작행 0,1,2,3,4,5
#     df3.to_excel(w, sheet_name='Sheet1', index=False, header=False, startcol=ord(start_column) - ord('A'), startrow=start_row) # 제목열 제외하고 데이터 시작행 0,1,2,3,4,5
    df3.to_excel(w, sheet_name='Sheet1', index=False, header=False, startcol=column_index_from_string(start_column) - column_index_from_string("A"), startrow=start_row) # 제목열 제외하고 데이터 시작행 0,1,2,3,4,5