data = {'col1':[1,2],'col2':[3,4]}
df = pd.DataFrame(data = data)
print(df)
>>
col1 col2
0 1 3
1 2 4
기본적인 사용법
기본적으로 df.__iter__( ) 형태로 사용하며, 열 인덱스의 map 오브젝트를 반환합니다.
df2 = df.__iter__()
print(df2)
>>
<map object at 0x000001CAFD121D00>
map 오브젝트는 range함수처럼 하나씩 꺼내서 쓰는형태이기 때문에 단순 print로는 출력이 불가합니다.
반복자 (iterator)이기 때문에 next 메서드를 통해 하나씩 확인할 수 있습니다.
print(next(df2))
>>
col1
print(next(df2))
>>
col2
list 메서드를 이용하면 리스트 형태로 반환이 가능합니다.
print(list(df))
>>
['col1', 'col2']
data = {'col1':[1,2],'col2':[3,4]}
idx = ['row1','row2']
df = pd.DataFrame(data = data, index=idx)
print(df)
>>
col1 col2
row1 1 3
row2 2 4
기본적인 사용법
기본적으로 df.items() 형태로 사용하며, 출력 시 generator 객체인 것을 확인 할 수 있습니다.
df2 = df.items()
print(df2)
>>
<generator object DataFrame.items at 0x000001E83178D430>
generator 역시 iterator(반복자) 로 for문이나 list로 내용을 확인 할 수 있습니다.
df2 = df.items()
for iin df2:
print("="*10)
print(i)
>>
==========
('col1', row1 1
row2 2
Name: col1, dtype: int64)
==========
('col2', row1 3
row2 4
Name: col2, dtype: int64)
# 튜플 형태로 (열이름, 내용의 Series객체)출력됨
for문을 한번 더 사용해서 튜플의 내용을 한 줄마다 출력하면 보다 더 직관적으로 확인할 수 있습니다.
df2 = df.items()
for iin df2:
print("="*30)
for jin i:
print(j)
>>
==========
col1
row1 1
row2 2
Name: col1, dtype: int64
==========
col2
row1 3
row2 4
Name: col2, dtype: int64
data = {'col1':[1,2],'col2':[3,4]}
idx = ['row1','row2']
df = pd.DataFrame(data = data, index=idx)
print(df)
>>
col1 col2
row1 1 3
row2 2 4
기본적인 사용법
기본적으로 df.iterrows() 형태로 사용하며, 출력 시 generator 객체인 것을 확인 할 수 있습니다.
df2 = df.iterrows()
print(df2)
>>
<generator object DataFrame.iterrows at 0x0000027666A4C430>
generator 역시 iterator(반복자) 로 for문이나 list로 내용을 확인 할 수 있습니다.
df2 = df.iterrows()
for iin df2:
print("="*30)
print(i)
>>
==============================
('row1', col1 1
col2 3
Name: row1, dtype: int64)
==============================
('row2', col1 2
col2 4
Name: row2, dtype: int64)
for문을 한번 더 사용해서 튜플의 내용을 한 줄마다 출력하면 보다 더 직관적으로 확인할 수 있습니다.
Copydf2 = df.iterrows()
for iin df2:
print("=" * 30)
for jin i:
print(j)
>>
==============================
row1
col1 1
col2 3
Name: row1, dtype: int64
==============================
row2
col1 2
col2 4
Name: row2, dtype: int64
print(df.itertuples())
>>
<map object at 0x0000027D368BCE80>
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)] # 지정된 name으로 namedtuple 반환
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 : 특정 스토리지 연결에 적합한 추가 옵션, 예: 호스트, 포트, 사용자 이름, 비밀번호 등을 지정합니다.
CSV는 "Comma-Separated Values"의 약자로, 쉼표로 구분된 값들이라는 뜻입니다.
CSV 파일은 엑셀처럼 표 형태의 데이터를 저장하는 텍스트 파일입니다. 각 줄은 하나의 행(row)을 나타내고, 쉼표(,)로 나뉜 각 값은 열(column)을 나타냅니다.
먼저 기본적인 사용법 예시를위하여 3x2 짜리 데이터를 만들어 보겠습니다.
data = [[1,np.NaN],['A',4.1],['-','3']]
df = pd.DataFrame(data)
#address = 'C:\\Users\\lifcr\\OneDrive\\바탕 화면\\pandas\\' #기본 경로 설정해줌(코딩이 길어지므로) colab에서 실행하면 굳아 지정해줄 필요가 없음
>>
0 1
0 1 NaN # 결측치 NaN 포함
1 A 4.1 # 문자 A, 부동소수점 4.1 포함
2 - 3 # 문자 - 포함
기본적으로 path_or_buf에 경로와 파일 이름을 지정해주면, 해당 경로에 df가 변환된 csv파일이 생성됩니다.
df.to_csv(path_or_buf='test1.csv')
sep 인수는 csv파일의 구분자를 설정해 줍니다. 기본값은 쉼표(,)입니다.
Copydf.to_csv(path_or_buf=address+'test2.csv', sep='-')#쉼표들을 -로 대체해줍니다
>>
-0-1
0-1-
1-A-4.1
2-"-"-3
=
-0-1#col
row 0-1-nan
1-A-4.1
2-"-"-3
na_rep인수는 데이터의 결측값(NaN)을 어떤 값으로 출력할지를 지정할 수 있습니다.
df.to_csv(path_or_buf='test3.csv', na_rep=100)#결측값을 100으로 지정해서 출력함
>>
,0,1
0,1,100
1,A,4.1
2,-,3
float_format인수는 부동소수점 형식 데이터의 출력 포맷을 설정할 수 있습니다.
만약 값으로 그냥 string 형태의 값을 입력할 경우 해당 값이 출력됩니다.
df.to_csv(path_or_buf='test4.csv', float_format='%.2f')
,0,1
0,1,
1,A,4.1 #원래 4.10이 출력되어야 하는데 소수점0이라서 그냥 무시하는거 같음
2,-,3
columns인수는 출력할 대상 열을 지정하는 인수입니다. 따로 입력하지 않는경우 모든 열이 csv변환 됩니다.
df.to_csv(path_or_buf='test5.csv', columns=[0])#열의 0번째만 출력함
>>
,0
0,1
1,A
2,-
header인수는 열의 이름을 지정하는 인수입니다. False일 경우 열 이름을 출력하지 않습니다.
df.to_csv(path_or_buf='test6.csv', header=['col1','col2'])#머리값을 추가해준다
>>
,col1,col2
0,1,
1,A,4.1
2,-,3
index인수는 인덱스의 출력 여부를 지정할 수 있습니다. 기본값은 True 입니다.
df.to_csv(path_or_buf='test7.csv', index=False)
>>
0,1
1,
A,4.1
-,3
index_lable인수는 출력되는 csv파일의 인덱스명을 지정하는 인수 입니다.
df.to_csv(path_or_buf='test8.csv', index_label=['index'])#인덱스명 지정함수
>>
index,0,1
0,1,
1,A,4.1
2,-,3
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)
결과는 아래와 같습니다. header=False로 열 이름이 삭제되어 깔끔하게 합쳐진것을 확인할 수 있습니다.
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 데이터 하나를 만들어 보겠습니다.
Copydata1 = [[1,np.nan],['A',4.1],[math.inf,'3']]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data=[[5,6],[7,8],[9,10]],index=[['A','B','B'],[3,4,5]]) #멀티인덱스 객체
print(df1)
print(df2)
>>
0 1
0 1 NaN
1 A 4.1
2 - 3
0 1
A 3 5 6
B 4 7 8
5 9 10
기본적으로는 excel_writer에 단순히 경로를 지정하는것 만으로 엑셀로의 변환이 실행됩니다.
Copydf1.to_excel(excel_writer='test1.xlsx')
>>
0 1
0 1
1 A 4.1
2 - 3
sheet_name인수를 통해 데이터가 변환되는 엑셀의 시트명을 지정할 수 있습니다.
Copydf1.to_excel(excel_writer='test2.xlsx',sheet_name='test_sheet')#sheet_name으로 시트명을 지정할 수 있다
여러 시트에 데이터를 적용하고자 할 경우 ExcelWriter 객체로 writer를 지정해 입력하면 됩니다.
with pd.ExcelWriter('test3.xlsx')as writer:
df1.to_excel(writer, sheet_name='test_sheet_1')
df2.to_excel(writer, sheet_name='test_sheet_2')
na_rep 인수를 통해 결측치를 대체할 값을 지정할 수 있습니다. 기본값은 공백(" ")입니다.
df1.to_excel(excel_writer='test4.xlsx',na_rep='BLANK')#na_rep= 함수로 결측치값을 대체할 수 있다
columns인수를 통해 변환할 열을 따로 지정할 수 있습니다.
df1.to_excel(excel_writer='test6.xlsx',columns=[0])#열지정 csv와 파일형식만 다르지 출력은 같다
header인수를 통해 변환될 데이터의 열 이름을 지정할 수 있습니다.
df1.to_excel(excel_writer='test7.xlsx',header=['col1','col2'])#열 이름 지정 csv와 파일형식만 다르지 출력은 같다
Index 인수를 통해 인덱스를 출력할지 여부를 지정할 수 있습니다. 기본값은 True로 인덱스를 출력합니다.
df1.to_excel(excel_writer='test8.xlsx', index=False)#인덱스 출력 여부 csv와 파일형식만 다르지 출력은 같다
Index_label 인수를 통해 인덱스명을 지정할 수 있습니다. Multi Index라면 리스트 형식으로 입력해주어야합니다.
df2.to_excel(excel_writer='test9.xlsx', index_label=['idx1','idx2'])#멀티인덱스이기 때문에 리스트 형식으로 입력했다 index_label은 인덱스 명을 지정해 준다
startrow / startcol 인수는 엑셀 변환시 데이터의 위치를 지정하는 인수입니다. 양수를 입력할 경우 처음 시작위치에서 행의 경우 아래로, 열의 경우 우측으로 해당 숫자만큼 이동하여 변환됩니다.
df1.to_excel(excel_writer='test10.xlsx', startrow=2,startcol=4)#2행 4열 우측으로 움직였다
merge_cells의 기본값은 True로 인덱스에 중복값이 있을 경우 병합하여 출력합니다.
False인 경우 각각 인덱스가 그대로 출력됩니다.
merge_cells=True인 경우
df2.to_excel(excel_writer=adress+'test11_1.xlsx')#중복값인 B가 병합하여 하나만 출력함

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='∞')
아래와 같이 무한을 표현하는 math.inf 값이 문자 ∞ 로 입력된 것을 알 수 있습니다.

freeze_panes인수의 사용
freeze_panes인수의 값을 튜플로 입력함으로써 해당 (행,열) 기준으로 틀고정을 설정할 수 있습니다.
df1.to_excel(excel_writer=adress+'test13.xlsx', freeze_panes=(1,1))
아래와 같이 (1,1)을 기준으로 틀고정이 된 것을 확인할 수 있습니다.
