DataFrames를 파일로 쓰기
to_csv와 to_excel로 정제한 DataFrame을 CSV와 Excel로 내보내고 인덱스와 실수 형식을 제어합니다.
DataFrames를 파일로 쓰기은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
내보내기가 중요한 이유
데이터 분석은 Python 내부에서 끝나는 경우가 드뭅니다. 정제된 데이터 집합을 관계자와 공유하거나, 결과를 다른 도구에 제공하거나, 재현성을 위해 처리된 데이터를 보관해야 합니다. Pandas는 to_csv(), to_excel(), to_json(), to_parquet()을 제공하며, 읽기 함수와 대응하고 대부분 동일한 설정 매개변수를 사용할 수 있습니다.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
df.to_csv('results.csv')
df.to_excel('results.xlsx')
df.to_json('results.json', orient='records')to_csv(): 인덱스에서 주의할 점
기본적으로 to_csv()은 행 인덱스를 첫 번째 열로 작성하므로, 파일을 다시 읽을 때 unnamed: 0 열이 생성됩니다. 인덱스를 제외하려면 index=False를 전달하십시오. 인덱스 자체가 날짜처럼 의미 있는 데이터인 경우가 아니라면 거의 항상 올바른 선택입니다. 인덱스를 포함해야 할 분명한 이유가 없다면 항상 index=False를 지정하십시오.
import pandas as pd
df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
# Include index (default -- creates 'Unnamed: 0' when re-read)
df.to_csv('with_index.csv')
# Exclude index (recommended)
df.to_csv('clean.csv', index=False)구분 기호와 인코딩 제어
탭으로 구분된 파일이나 세미콜론으로 구분된 파일을 작성하려면 sep=을 전달하십시오. 열 값에 악센트 부호나 중국어 문자처럼 ASCII가 아닌 문자가 포함될 때는 encoding=으로 UTF-8 또는 다른 문자 집합을 지정해야 합니다. encoding='utf-8-sig'는 Windows에서 Excel과 호환되도록 BOM(바이트 순서 표시)을 추가합니다.
import pandas as pd
df = pd.DataFrame({'name': ['Müller', 'Tanaka'], 'val': [1, 2]})
# Tab-separated, UTF-8
df.to_csv('output.tsv', sep='\t', encoding='utf-8', index=False)
# Excel-compatible UTF-8 with BOM
df.to_csv('for_excel.csv', encoding='utf-8-sig', index=False)실수 형식 제어
기본적으로 Pandas는 실수를 최대 정밀도로 작성합니다. float_format='%.2f'를 사용하면 소수점 이하 2자리로 제한할 수 있습니다. 이는 불필요한 소수 자릿수가 사람이 읽기에 부자연스러워 보일 수 있는 재무 데이터에서 중요합니다. 출력 파일에 NaN 값을 작성하는 방식을 제어하려면 na_rep='NULL' 또는 na_rep=''를 전달하십시오.
import pandas as pd
import numpy as np
df = pd.DataFrame({'price': [9.99, np.nan, 14.123456],
'qty': [1, 2, 3]})
df.to_csv('prices.csv',
index=False,
float_format='%.2f',
na_rep='N/A')to_excel(): 시트 작성
df.to_excel('file.xlsx', sheet_name='Data', index=False)는 DataFrame을 Excel 통합 문서에 작성합니다. to_csv()와 마찬가지로 인덱스가 의미 있지 않다면 index=False를 설정하십시오. startrow= 및 startcol= 매개변수로 시트 안에서 표의 위치를 지정할 수 있으므로, 데이터 위에 제목 행을 추가할 때 유용합니다.
import pandas as pd
df = pd.DataFrame({'product': ['A', 'B'], 'sales': [100, 200]})
df.to_excel('report.xlsx',
sheet_name='Sales',
index=False,
startrow=1) # leave row 0 for a titleExcelWriter로 여러 시트 작성
같은 통합 문서의 서로 다른 시트에 여러 DataFrames를 작성하려면 pd.ExcelWriter를 컨텍스트 관리자로 사용하십시오. with 블록 안에서 각 DataFrame에 대해 df.to_excel(writer, sheet_name='Name')을 호출하십시오. 컨텍스트를 벗어나면 통합 문서가 마무리되고 저장됩니다. 이렇게 하면 관련된 표마다 별도의 파일을 여러 개 만들 필요가 없습니다.
import pandas as pd
df1 = pd.DataFrame({'a': [1, 2]})
df2 = pd.DataFrame({'b': [3, 4]})
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)to_json(): JSON 내보내기
df.to_json()은 DataFrame을 JSON으로 직렬화합니다. orient= 매개변수는 read_json과 대응합니다. 행 사전의 목록에는 'records'(호환성이 가장 높음), 열 배열의 사전에는 'columns', 행 레이블을 키로 하는 사전에는 'index'를 사용하십시오. 사람이 읽기 쉬운 형식으로 작성하려면 indent=2를 전달하십시오.
import pandas as pd
df = pd.DataFrame({'name': ['A', 'B'], 'score': [90, 75]})
print(df.to_json(orient='records', indent=2))
# [
# {"name": "A", "score": 90},
# {"name": "B", "score": 75}
# ]기존 파일에 추가하기
기존 CSV를 덮어쓰지 않고 행을 추가하려면 mode='a'를 사용하여 파일을 추가 모드로 열고, 헤더 행이 중복되지 않도록 header=False를 설정하십시오. Excel에는 mode='a'와 함께 ExcelWriter를 사용하십시오. 대용량 스트리밍 처리에서는 덩어리 단위로 추가하고 첫 번째 덩어리에서만 헤더를 작성하십시오.
import pandas as pd
df_new = pd.DataFrame({'a': [5, 6], 'b': [7, 8]})
# Append to existing file, skip writing header
df_new.to_csv('existing.csv',
mode='a',
header=False,
index=False)내보내기 전에 열 선택
내보내기 전에 받는 사람에게 필요한 열만 선택하고 행을 논리적인 순서로 정렬하는 것이 좋습니다. 이렇게 하면 출력 파일이 더 깔끔해지고 내부 ID, 인코딩된 특성, 디버그 플래그와 같은 내부 열이 실수로 노출되는 일을 막을 수 있습니다. 작성하기 전에 같은 파이프라인 표현식에서 대괄호 선택과 sort_values()를 사용하십시오.
import pandas as pd
df = pd.DataFrame({'id': [3,1,2],
'name': ['C','A','B'],
'_internal': [9,7,8]})
(df[['id', 'name']]
.sort_values('id')
.to_csv('export.csv', index=False))작성한 파일 확인
작성한 후에는 항상 파일을 다시 읽고 다음을 확인하십시오. shape, 열 이름, 몇 개의 표본 값입니다. 지속적 통합 파이프라인에서는 체크섬을 비교하십시오. 중요한 재무 내보내기에서는 집계된 합계가 일치하는지 단언하십시오. 이렇게 하면 파일이 후속 사용 시스템에 전달되기 전에 인코딩 문제, 실수 정밀도 손실, 인덱스 문제를 발견할 수 있습니다.
import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})
df.to_csv('/tmp/check.csv', index=False)
df_check = pd.read_csv('/tmp/check.csv')
assert df_check.shape == df.shape, 'Row/column count mismatch'
assert list(df_check.columns) == list(df.columns)
print('Export verified OK')Parquet: 데이터를 위한 더 나은 대안
대규모 분석 데이터셋에는 CSV 대신 Parquet 형식을 고려해 보십시오. Parquet은 데이터를 열 형식으로 저장하고, 압축을 지원하며, 데이터 형식을 정확하게 보존하고, 분석 쿼리에서 10~100배 더 빠르게 읽을 수 있습니다. df.to_parquet('data.parquet')로 작성하고 pd.read_parquet('data.parquet')로 읽으십시오. 사용하려면 pyarrow 또는 fastparquet를 설치해야 합니다.
import pandas as pd
df = pd.DataFrame({'a': range(1000000), 'b': range(1000000)})
df.to_parquet('data.parquet', index=False)
df2 = pd.read_parquet('data.parquet')
print(df2.dtypes) # dtypes preserved exactly빠른 확인
이 강의에서 배운 DataFrame을 파일에 작성하는 방법을 제대로 이해했는지 확인해 보십시오.
강의 복습
이 강의에서는 다음을 배웠습니다. to_csv()와 to_excel()은 DataFrame을 내보내며, 기본적으로 둘 다 인덱스를 포함하므로 깔끔한 출력을 위해 항상 index=False를 설정해야 합니다. 또한 ExcelWriter를 사용하면 하나의 통합 문서에서 여러 DataFrame을 별도의 시트에 작성할 수 있습니다. 그리고 Parquet은 대규모 분석 데이터셋에서 CSV보다 빠르고 공간 효율적인 대안입니다. 다음으로는 URL에서 원격 CSV 파일을 불러오고 io.StringIO를 사용해 메모리에 있는 CSV 문자열을 구문 분석합니다.
자주 묻는 질문
“DataFrames를 파일로 쓰기” 강의는 무료인가요?
네 — “DataFrames를 파일로 쓰기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“DataFrames를 파일로 쓰기”에서 뭘 배우나요?
to_csv와 to_excel로 정제한 DataFrame을 CSV와 Excel로 내보내고 인덱스와 실수 형식을 제어합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“DataFrames를 파일로 쓰기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- CSV 파일 읽기
- Excel 및 JSON 파일 읽기
- DataFrames를 파일로 쓰기
- URL과 StringIO에서 읽기