Python 공부 기록-24

김시헌·2025년 5월 13일

열 인덱스 반복자 반환 (iter)

DataFrame.iter()
iter 메서드는 열 인덱스를 map 오브젝트 형태의 반복자(iterator)로 반환하는 메서드입니다.

사용법

df.iter( )

예시

먼저 기본적인 사용법 예시를위하여 2x2 짜리 데이터를 만들어 보겠습니다.

코드

data = {'col1':[1,2],'col2':[3,4]}
df = pd.DataFrame(data = data)
print(df)

실행 결과

기본적인 사용법

기본적으로 df.iter( ) 형태로 사용하며, 열 인덱스의 map 오브젝트를 반환합니다.

코드

df2 = df.__iter__()
print(df2)

실행 결과
<map object at 0x78cba6acb160>

map 오브젝트는 range함수처럼 하나씩 꺼내서 쓰는형태이기 때문에 단순 print로는 출력이 불가합니다.
반복자 (iterator)이기 때문에 next 메서드를 통해 하나씩 확인할 수 있습니다.

코드

print(next(df2))

실행 결과
col1

코드

print(next(df2))

실행 결과
col2

list 메서드를 이용하면 리스트 형태로 반환이 가능합니다.

코드

print(list(df))

실행 결과
print(list(df))

열과 내용의 반복자 반환 (items, iteritems)

DataFrame.items()
items 메서드는 데이터의 열-행/데이터 정보를 튜플 형태의 generator 객체로 반환하는 메서드입니다.
(열 이름, 내용의 Series객체) 형태로 반환하는데, Series객체는 행, 값 형태로 반환됩니다.
※ iteritems 메서드와 동일한 메서드입니다.

사용법

df.items()

예시

먼저 기본적인 사용법 예시를위하여 2x2 짜리 데이터를 만들어 보겠습니다.

코드

data = {'col1':[1,2],'col2':[3,4]}
idx = ['row1','row2']
df = pd.DataFrame(data = data, index=idx)
print(df)

실행 결과

기본적인 사용법

기본적으로 df.items() 형태로 사용하며, 출력 시 generator 객체인 것을 확인 할 수 있습니다.

코드

df2 = df.items()
print(df2)

실행 결과
<generator object DataFrame.items at 0x78cba6c922f0>

generator 역시 iterator(반복자) 로 for문이나 list로 내용을 확인 할 수 있습니다.

코드

df2 = df.items()
for i in df2:
    print("="*100)
    print(i)

실행 결과

for문을 한번 더 사용해서 튜플의 내용을 한 줄마다 출력하면 보다 더 직관적으로 확인할 수 있습니다.

코드

df2 = df.items()
for i in df2:
    print("="*30)
    for j in i:
        print(j)

실행 결과

행과 내용의 반복자 반환 (iterrows)

DataFrame.iterrows()
iterrows 메서드는 데이터의 행-열/데이터 정보를 튜플 형태의 generator 객체로 반환하는 메서드입니다.
(행 이름, 내용의 Series객체) 형태로 반환하는데, Series객체는 열 - 값 형태로 반환됩니다.

사용법

df.iterrows()

예시

먼저 기본적인 사용법 예시를위하여 2x2 짜리 데이터를 만들어 보겠습니다.

코드

data = {'col1':[1,2],'col2':[3,4]}
idx = ['row1','row2']
df = pd.DataFrame(data = data, index=idx)
print(df)

실행 결과

기본적인 사용법

기본적으로 df.iterrows() 형태로 사용하며, 출력 시 generator 객체인 것을 확인 할 수 있습니다.

코드

df2 = df.iterrows()
print(df2)

실행 결과
<generator object DataFrame.items at 0x78cba6c92890>

generator 역시 iterator(반복자) 로 for문이나 list로 내용을 확인 할 수 있습니다.

코드

df2 = df.iterrows()
for i in df2:
    print("="*30)
    print(i)

실행 코드

for문을 한번 더 사용해서 튜플의 내용을 한 줄마다 출력하면 보다 더 직관적으로 확인할 수 있습니다.

코드

df2 = df.iterrows()
for i in df2:
    print("=" * 30)
    for j in i:
        print(j)

실행 코드

튜플형태 반복자 반환 (itertuples)

DataFrame.itertuples(index=True, name='Pandas')
itertuples 메서드는 데이터의 인덱스, 열-값 정보를 map오브젝트의 튜플 형태로 반환하는 메서드입니다.
튜플은 name인수를 통해 원하는named tuple로 출력이 가능합니다.

사용법

df.itertuples(index=True, name='Pandas')
index : 인덱스를 출력할지 여부 입니다.
name : 출력하게 될 named tuple의 이름을 지정합니다. None으로 하면 일반 튜플로 출력되며 기본값은 Pandas입니다.

예시

먼저 기본적인 사용법 예시를위하여 2x2 짜리 데이터를 만들어 보겠습니다.

코드

data = {'col1':[1,2],'col2':[3,4]}
idx = ['row1','row2']
df = pd.DataFrame(data = data, index=idx)
print(df)

실행 결과

기본적인 사용법

df.itertuples() 형태로 사용가능하며 기본적으로 map 오브젝트로 반환하기 때문에, list, next, for문 등으로 확인이 가능합니다.

코드

print(df.itertuples())

실행 결과
<map object at 0x78cba6acb730>

list를 이용해 출력해보면, 구성이 튜플(인덱스, 열=값, 열=값...) 형태인 것을 확인할 수 있습니다.

코드

print(list(df.itertuples()))

실행 코드
[Pandas(Index='row1', col1=1, col2=3), Pandas(Index='row2', col1=2, col2=4)]

index인수의 사용

index=False로 입력할 경우 반환되는 튜플값에서 인덱스 정보가 제외됩니다.

코드

print(list(df.itertuples(index=False)))

실행 결과
[Pandas(col1=1, col2=3), Pandas(col1=2, col2=4)]

name인수의 사용

name인수를 지정해주면, 튜플이 namedtuple 형태로 반환됩니다. 기본값은 Pandas이며 None 입력시 일반 튜플로 반환합니다.

코드

print(list(df.itertuples(name=None)))

실행 결과
[('row1', 1, 3), ('row2', 2, 4)]

코드

print(list(df.itertuples(name="테스트")))

실행 결과
[테스트(Index='row1', col1=1, col2=3), 테스트(Index='row2', col1=2, col2=4)]

csv으로 변환 (to_csv)

DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict', storage_options=None)
to_csv 메서드는 데이터프레임 객체를 csv 형식으로 변환하는 메서드입니다.

사용법

df.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict', storage_options=None)
path_or_buf : csv파일이 생성되는 경로와 파일명 입니다.
sep : csv 파일의 구분자 입니다. 기본값은 ' , ' 입니다.
na_rep : 결측값을 어떻게 출력할지 지정할 수 있습니다. 기본값은 공백 입니다.
float_format : 부동소수점의 경우 어떤 형식으로 출력할지 지정할 수 있습니다.
columns : 출력할 열을 지정하는 인수 입니다.
header : 열 이름을 설정합니다. False일 경우 열 이름을 출력하지 않습니다.
index : 인덱스의 출력 여부 입니다. False일 경우 인덱스를 출력하지 않습니다.
index_label : 인덱스의 레이블(인덱스명)을 설정합니다.
mode : {'w' / 'a'} 쓰기 모드를 지정합니다. a로 지정할 경우 기존 파일 아래에 값을 추가하여 입력하게됩니다.
encoding : 인코딩 설정입니다. 기본값은 utf-8입니다.
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None} 압축 설정을 지정합니다. 기본값은 'infer'로 적절한 압축형식을 추론합니다.
quoting : 값에 대해서 인용구 설정을 할 수 있습니다. 어떤 값에 대해서 인용구를 설정할지는 아래와 같습니다.
{0 : MINIMAL 문자와 특수문자 / 1 : ALL 모든필드 / 2 : NONNUMERIC 숫자가 아닌것 / 3 : NONE 안함}
quotechar : quoting에서 지정한 인용구에 대해서 인용구에 사용할 문자를 지정합니다. 기본값은 쌍따옴표 입니다.
chunksize : 한번에 불러올 행의 수를 지정합니다. 예를들어 100을 입력할 경우 한번에 100행씩 변환합니다. 속도 향상에 기여합니다.
date_format : 값이 시계열(datetime) 데이터인 경우 그 값의 포맷을 지정합니다.(예 : '%Y-%m')
doublequoto : 값중에 quotechar과 같은 값이 있을때, 그 값을 인용구 처리할지의 여부 입니다.
escapechar : doublequoto=False인 경우 인용구와 중복되는 그 값을 어떤 값으로 변경할지 여부입니다.
decimal : 자리수로 쓰이는 문자를 지정합니다.즉, 100,000의 경우 decimal="."으로 할 경우100.000으로 표시합니다.
errors : 인코딩 오류에 대해서 오류 처리를 정할 수 있습니다. 가능한 값은 아래와 같습니다.
{strict : 인코딩 오류에 ValueError 발생 / ignore : 무시 / replace 잘못된 데이터를 대체마커 '?' 지정 / ...}
더 많은 값에 대해서는 python library 의 strict 문서 참고 바랍니다.
storage_options : 특정 스토리지 연결에 적합한 추가 옵션, 예: 호스트, 포트, 사용자 이름, 비밀번호 등을 지정합니다.

예시

먼저 기본적인 사용법 예시를위하여 3x2 짜리 데이터를 만들어 보겠습니다.

코드

data = [[1,np.nan],['A',4.1],['-','3']]
df = pd.DataFrame(data)
address = 'C:\\Users\\lifcr\\OneDrive\\바탕 화면\\pandas\\' #기본 경로 설정해줌(코딩이 길어지므로)
print(df)

실행 결과

기본적인 사용법

기본적으로 path_or_buf에 경로와 파일 이름을 지정해주면, 해당 경로에 df가 변환된 csv파일이 생성됩니다.

코드

df.to_csv(path_or_buf=address+'test1.csv')

실행 결과

sep 인수의 사용

sep 인수는 csv파일의 구분자를 설정해 줍니다. 기본값은 쉼표(,)입니다.

코드

df.to_csv(path_or_buf=address+'test2.csv', sep='-')

실행 결과

na_rep인수의 사용

na_rep인수는 데이터의 결측값(NaN)을 어떤 값으로 출력할지를 지정할 수 있습니다.

코드

df.to_csv(path_or_buf=address+'test3.csv', na_rep=100)

실행 결과

float_format 인수의 사용

float_format인수는 부동소수점 형식 데이터의 출력 포맷을 설정할 수 있습니다.
만약 값으로 그냥 string 형태의 값을 입력할 경우 해당 값이 출력됩니다.

코드

df.to_csv(path_or_buf=address+'test4.csv', float_format='%.2f')

실행 결과

columns인수의 사용

columns인수는 출력할 대상 열을 지정하는 인수입니다. 따로 입력하지 않는경우 모든 열이 csv변환 됩니다.

코드

df.to_csv(path_or_buf=address+'test5.csv', columns=[0]

실행 결과

header 인수의 사용

header인수는 열의 이름을 지정하는 인수입니다. False일 경우 열 이름을 출력하지 않습니다.

코드

df.to_csv(path_or_buf=address+'test6.csv', header=['col1','col2'])

실행 결과

index인수의 사용

index인수는 인덱스의 출력 여부를 지정할 수 있습니다. 기본값은 True 입니다.

코드

df.to_csv(path_or_buf=address+'test7.csv', index=False) 

실행 결과

index_label인수의 사용

index_lable인수는 출력되는 csv파일의 인덱스명을 지정하는 인수 입니다.

코드

df.to_csv(path_or_buf=address+'test8.csv', index_label=['index'])

실행 결과

mode 인수의 사용

mode 인수는 기본값이 w로 기존 데이터에 새 데이터를 덮어씌웁니다. mode='a'인 경우 기존 데이터 아래에 새 데이터를 추가해서 입력합니다.

코드

df.to_csv(path_or_buf=address+'test9.csv', mode='w') #기존 데이터 csv파일생성
df2 = pd.DataFrame(data=[[7,8],[9,10]],index=[3,4]) # 추가 입력할 새 데이터 객체 생성
df2.to_csv(path_or_buf=address+'test9.csv', mode='a') # mode=a로 기존데이터 아래에 추가함

실행 결과

이렇게 단순히 추가하는경우 열 이름이 새로 추가되기 때문에, 보기에 깔끔하지 않습니다. 이경우 header=False하여 새로 추가하는 데이터의 열 이름을 삭제해서 깔끔하게 합치는것이 가능합니다.

코드

df.to_csv(path_or_buf=address+'test10.csv', mode='w')
df2.to_csv(path_or_buf=address+'test10.csv', mode='a',header=False)

실행 결과

excel로 변환 (to_excel)

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None, storage_options=None)
to_excel 메서드는 데이터프레임 객체를 엑셀 형태로 변환하는 메서드입니다.

사용법

df.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None, storage_options=None)

excel_writer : 경로와 파일 이름을 설정하거나 ExcelWriter 객체를 지정합니다.
sheet_name : 시트 이름을 설정해줍니다. 중복인 경우 덮어씌워집니다.
na_rep : 결측치를 대체할 값을 설정합니다. 기본값은 공백(" ") 입니다.
float_format : 부동소수점의 표현방식을 지정합니다.
columns : 엑셀로 변환할 열을 지정합니다.
header : 열 이름을 설정합니다. None인 경우에는 열이름을 출력하지 않습니다.
index : index의 출력 여부를 정합니다.
index_label : index명을 지정합니다. Multi Index의 경우 리스트 형식으로 지정해주어야합니다.
startrow / startcol : 값이 입력되는 위치를 지정합니다.
engine : 사용할 엔진을 지정합니다. 'openpyxl' 또는 'xlsxwriter'. io.excel.xlsx.writer, io.excel.xls.writer 및 io.excel.xlsm.writer 옵션을 통해 이를 설정할 수도 있습니다. merge_cells : Index가 중복인 경우 엑셀로 변환시 병합할지 정합니다. 기본값은 True로 병합이 됩니다.
encoding : 결과 엑셀파일의 인코딩을 지정합니다. xlwt에만 필요하며 다른 경우는 기본 유니코드를 지원합니다.
inf_rep : 엑셀은 기본적으로 무한에대한 표시형식이 없기때문에, 무한인 값을 어떻게 표시할지 정합니다. 기본값은 'inf' 입니다.
vervose : 오류 로그에 추가 정보를 표시할지 여부입니다. 기본값은 True입니다.
freeze_panes : 틀고정을 지정합니다. 튜플로 (값, 값) 형태로 지정합니다.
storage_options : 특정 스토리지 연결에 적합한 추가 옵션을 지정합니다. (예 : 호스트, 포트, 사용자 이름, 비밀번호 등)

예시

먼저 기본적인 사용법 예시를위하여 3x2 데이터 하나와 Multi Index 데이터 하나를 만들어 보겠습니다.

코드
코드 실행할 떄 import math 해주어야 함

data1 = [[1,np.nan],['A',4.1],[math.inf,'3']]
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data=[[5,6],[7,8],[9,10]],index=[['A','B','B'],[3,4,5]]) #멀티인덱스 객체
print(df1)
print(df2)
adress = 'C:\\Users\\2064055\\Desktop\\pandas\\' # address변수에 경로 지정해둠

실행 결과

기본적인 사용법

기본적으로는 excel_writer에 단순히 경로를 지정하는것 만으로 엑셀로의 변환이 실행됩니다.

코드

df1.to_excel(excel_writer=adress+'test1.xlsx')
print(df1)

실행 결과

sheet_name 인수의 사용

sheet_name인수를 통해 데이터가 변환되는 엑셀의 시트명을 지정할 수 있습니다.

코드

df1.to_excel(excel_writer=adress+'test2.xlsx',sheet_name='test_sheet')

실행 결과

여러 시트에 데이터를 적용하고자 할 경우 ExcelWriter 객체로 writer를 지정해 입력하면 됩니다.

코드

with pd.ExcelWriter(adress+'test3.xlsx') as writer:
    df1.to_excel(writer, sheet_name='test_sheet_1')
    df2.to_excel(writer, sheet_name='test_sheet_2')

실행 결과

na_rep 인수의 사용

na_rep 인수를 통해 결측치를 대체할 값을 지정할 수 있습니다. 기본값은 공백(" ")입니다.

코드

df1.to_excel(excel_writer=adress+'test4.xlsx',na_rep='BLANK')

실행 결과

columns인수의 사용

columns인수를 통해 변환할 열을 따로 지정할 수 있습니다.

코드

df1.to_excel(excel_writer=adress+'test6.xlsx',columns=[0])

실행 결과

header 인수의 사용

header인수를 통해 변환될 데이터의 열 이름을 지정할 수 있습니다.

코드

df1.to_excel(excel_writer=adress+'test7.xlsx',header=['col1','col2'])

실행 결과

Index 인수의 사용

Index 인수를 통해 인덱스를 출력할지 여부를 지정할 수 있습니다. 기본값은 True로 인덱스를 출력합니다.

코드

df1.to_excel(excel_writer=adress+'test8.xlsx', index=False)

실행 결과

Index_label인수의 사용

Index_label 인수를 통해 인덱스명을 지정할 수 있습니다. Multi Index라면 리스트 형식으로 입력해주어야합니다.

코드

df2.to_excel(excel_writer=adress+'test9.xlsx', index_label=['idx1','idx2'])

실행 결과

startrow / startcol 인수의 사용

startrow / startcol 인수는 엑셀 변환시 데이터의 위치를 지정하는 인수입니다. 양수를 입력할 경우 처음 시작위치에서 행의 경우 아래로, 열의 경우 우측으로 해당 숫자만큼 이동하여 변환됩니다.

코드

df1.to_excel(excel_writer=adress+'test10.xlsx', startrow=2,startcol=4)

실행 결과

merge_cells인수의 사용

merge_cells의 기본값은 True로 인덱스에 중복값이 있을 경우 병합하여 출력합니다.
False인 경우 각각 인덱스가 그대로 출력됩니다.
merge_cells=True인 경우

코드

df2.to_excel(excel_writer=adress+'test11_1.xlsx')

실행 결과

merge_cells=False인 경우

코드

df2.to_excel(excel_writer=adress+'test11_2.xlsx', merge_cells=False)

실행 결과

inf_rep 인수의 사용

inf_rep 인수는 무한 값의 엑셀 변화시 표현값을 지정합니다. 기본값은 inf입니다. (엑셀에는 무한값에 대한 기본 표현값이 없습니다.)

코드

df1.to_excel(excel_writer=adress+'test12.xlsx', inf_rep='∞')

실행 결과

freeze_panes인수의 사용

freeze_panes인수의 값을 튜플로 입력함으로써 해당 (행,열) 기준으로 틀고정을 설정할 수 있습니다.

코드

df1.to_excel(excel_writer=adress+'test13.xlsx', freeze_panes=(1,1))

실행 결과

0개의 댓글