Python, Pandas를 사용하여 기존 CSV 파일에 데이터 추가하기
Python, Pandas를 사용하여 기존 CSV 파일에 데이터 추가하기
- pandas
단계:
- Pandas 라이브러리 임포트:
import pandas as pd
- 기존 CSV 파일 읽기:
기존_데이터프레임 = pd.read_csv('기존_파일.csv')
- 새로운 데이터 준비:
새로운_데이터 = {
'열1': [새로운_값1, 새로운_값2, ...],
'열2': [새로운_값3, 새로운_값4, ...],
...
}
새로운_데이터프레임 = pd.DataFrame(새로운_데이터)
- 기존 데이터프레임에 새로운 데이터 병합:
합병된_데이터프레임 = pd.concat([기존_데이터프레임, 새로운_데이터프레임], ignore_index=True)
- 병합된 데이터프레임을 CSV 파일에 저장:
합병된_데이터프레임.to_csv('합병된_파일.csv', index=False)
주의 사항:
ignore_index=True
옵션을 사용하면 새로운 데이터프레임의 인덱스가 병합된 데이터프레임에 반영되지 않습니다.- 기존 CSV 파일과 새로운 데이터프레임의 열 순서가 동일해야 합니다.
mode='a'
옵션을 사용하면 기존 CSV 파일에 데이터를 추가할 수 있습니다. 예를 들어:
합병된_데이터프레임.to_csv('기존_파일.csv', mode='a', index=False)
예시:
import pandas as pd
# 기존 CSV 파일 읽기
기존_데이터프레임 = pd.read_csv('기존_파일.csv')
# 새로운 데이터 준비
새로운_데이터 = {
'열1': ['새로운 값 1', '새로운 값 2'],
'열2': ['새로운 값 3', '새로운 값 4'],
}
새로운_데이터프레임 = pd.DataFrame(새로운_데이터)
# 기존 데이터프레임에 새로운 데이터 병합
합병된_데이터프레임 = pd.concat([기존_데이터프레임, 새로운_데이터프레임], ignore_index=True)
# 병합된 데이터프레임을 CSV 파일에 저장
합병된_데이터프레임.to_csv('합병된_파일.csv', index=False)
이 코드는 '기존_파일.csv'라는 기존 CSV 파일에 '새로운_파일.csv'라는 새로운 데이터프레임의 내용을 추가합니다. 병합된 데이터는 '합병된_파일.csv'라는 새로운 CSV 파일에 저장됩니다.
예제 코드: Python Pandas를 사용하여 기존 CSV 파일에 데이터 추가하기
customer_id,item_id,sale_amount
1,1,200
2,3,500
3,1,300
새로운 판매 데이터는 다음과 같은 딕셔너리에 저장됩니다.
new_data = {
'customer_id': [4, 5, 6],
'item_id': [2, 1, 3],
'sale_amount': [400, 600, 700]
}
import pandas as pd
df = pd.read_csv('sales_data.csv')
new_df = pd.DataFrame(new_data)
merged_df = pd.concat([df, new_df], ignore_index=True)
merged_df.to_csv('updated_sales_data.csv', index=False)
설명:
pd.read_csv('sales_data.csv')
은 'sales_data.csv' 파일을 읽고 데이터프레임으로 변환합니다.pd.DataFrame(new_data)
는 새로운 판매 데이터를 딕셔너리에서 데이터프레임으로 변환합니다.pd.concat([df, new_df], ignore_index=True)
는 두 데이터프레임을 연결하여 새로운 데이터프레임을 만듭니다.ignore_index=True
옵션은 새로운 데이터프레임에 인덱스가 추가되지 않도록 합니다.merged_df.to_csv('updated_sales_data.csv', index=False)
는 병합된 데이터프레임을 'updated_sales_data.csv'라는 새 CSV 파일에 저장합니다.index=False
옵션은 CSV 파일에 인덱스가 포함되지 않도록 합니다.
실행 결과:
이 코드를 실행하면 'updated_sales_data.csv'라는 새 CSV 파일이 생성됩니다. 이 파일에는 다음과 같은 내용이 포함됩니다.
customer_id,item_id,sale_amount
1,1,200
2,3,500
3,1,300
4,2,400
5,1,600
6,3,700
Pandas를 사용하지 않고 CSV 파일에 데이터 추가하기
csv 모듈 사용:
import csv
# 기존 CSV 파일 읽기
with open('기존_파일.csv', 'r') as f:
reader = csv.reader(f)
기존_데이터 = list(reader)
# 새로운 데이터 준비
새로운_데이터 = [['새로운 값 1', '새로운 값 2'],
['새로운 값 3', '새로운 값 4']]
# 기존 데이터에 새로운 데이터 추가
기존_데이터.extend(새로운_데이터)
# 병합된 데이터를 CSV 파일에 쓰기
with open('합병된_파일.csv', 'w') as f:
writer = csv.writer(f)
writer.writerows(기존_데이터)
csv.reader
는 CSV 파일을 열고 각 행을 리스트로 읽습니다.- 이 예제에서는 기존 데이터를 읽고 새로운 데이터를 추가한 다음 병합된 데이터를 새 CSV 파일에 씁니다.
os 및 StringIO 모듈 사용:
import os
import io
# 기존 CSV 파일 읽기
with open('기존_파일.csv', 'r') as f:
기존_데이터 = f.read()
# 새로운 데이터 준비
새로운_데이터 = """새로운 값 1,새로운 값 2
새로운 값 3,새로운 값 4"""
# 기존 데이터에 새로운 데이터 추가
합병된_데이터 = 기존_데이터 + 새로운_데이터
# 병합된 데이터를 CSV 파일에 쓰기
with open('합병된_파일.csv', 'w') as f:
f.write(합병된_데이터)
os.open
은 CSV 파일을 엽니다.f.read()
는 파일의 내용을 문자열로 읽습니다.StringIO
모듈은 문자열을 파일 जैसा ऑब्जेक्ट로 변환합니다.f.write
는 파일에 문자열을 씁니다.
- 이러한 방법은 상대적으로 느리고 메모리 비효율적일 수 있습니다. 특히 대용량 CSV 파일을 처리하는 경우 Pandas를 사용하는 것이 좋습니다.
- CSV 파일 형식을 유지하는 것이 중요합니다. 예를 들어, 모든 행은 동일한 수의 구분자로 분리되어야 하며, 텍스트 구분자는 올바르게 삽입되어야 합니다.
- 오류 처리를 추가하는 것이 좋습니다. 예를 들어, 파일을 열 수 없거나 데이터 형식이 올바르지 않은 경우 예외를 처리해야 합니다.
python pandas csv