[데이터 전처리] 데이터 불러오기 및 저장(CSV, Excel, JSON 등)

CH1. 데이터 전처리 완벽 가이드

 

CH1. 데이터 전처리 완벽 가이드(1) | Notion

0. 데이터 분석? 데이터 전처리?

www.notion.so


 

 

CSV 파일 읽기 (pd.read_csv)와 쓰기 (DataFrame.to_csv)


  • CSV 읽기: CSV는 가장 많이 사용되는 데이터 교환 형식입니다. 판다스의 pd.read_csv('파일경로') 함수를 사용하면 파일 경로 또는 URL로부터 CSV 파일을 읽어 DataFrame을 얻을 수 있습니다.
  • 예를 들어, Kaggle의 샘플 슈퍼스토어 데이터가 superstore_orders.csv로 제공된다면 다음처럼 읽습니다:
import pandas as pd

orders = pd.read_csv('superstore_orders.csv')
print(orders.head(5))
```
Row ID        Order ID  Order Date   Ship Date       Ship Mode Customer ID  ....
0       1  CA-2017-152156  08/11/2017  11/11/2017    Second Class    CG-12520   
1       2  CA-2017-152156  08/11/2017  11/11/2017    Second Class    CG-12520   
2       3  CA-2017-138688  12/06/2017  16/06/2017    Second Class    DV-13045   
3       4  US-2016-108966  11/10/2016  18/10/2016  Standard Class    SO-20335   
4       5  US-2016-108966  11/10/2016  18/10/2016  Standard Class    SO-20335
```
  • read_csv의 주요 옵션
    • 구분자가 콤마가 아닌 경우 sep 인자를 지정할 수 있고, 헤더가 없는 파일은 header=None으로 읽은 뒤 컬럼 이름을 지정하면 됩니다.
    • 한글이 포함된 CSV의 경우 인코딩 문제로 읽지 못할 때 pd.read_csv('file.csv', encoding='utf-8') 혹은 필요한 인코딩(e.g. 'cp949')을 지정하면 됩니다.
    • 또한 parse_dates=['Order Date']처럼 날짜 컬럼을 바로 날짜 타입으로 읽도록 지정할 수도 있습니다.
  • CSV 쓰기: 편집 또는 분석한 데이터프레임을 CSV로 저장할 때는 DataFrame.to_csv('파일경로', index=False) 메서드를 사용합니다. index=False 를 지정하면 행 인덱스는 저장하지 않고 오직 데이터만 저장합니다 (일반적으로 행 번호는 의미 없는 경우가 많으므로).
orders.to_csv('processed_orders.csv', index=False)

# ➡️ processed_orders.csv 파일이 생성되고, 엑셀 등에서 열어볼 수 있는 csv 형식으로 저장됨

 

 

Excel 파일 읽기 (pd.read_excel)와 쓰기(DataFrame.to_excel)


  • Excel 읽기: 판다스는 pd.read_excel('파일경로', sheet_name=0)으로 엑셀 파일도 읽을 수 있습니다.
  • sheet_name 파라미터로 시트 이름이나 번호를 지정하여 특정 시트만 불러올 수 있습니다 (기본 0은 첫 번째 시트).
  • 예를 들어 슈퍼스토어 데이터셋이 Excel 워크북(Superstore.xlsx)으로 제공되는 경우:
orders = pd.read_excel('Superstore.xlsx', sheet_name='Orders')  
print(orders.shape)                       # 엑셀 시트이름 까지 입력!

# 엑셀을 불러올 때 판다스 내부적으로 openyxl 모듈을 사용하므로,
# [pip install openyxl]을 입력해서 설치해야 함.
(9994, 21)    # 읽은 데이터프레임의 (행, 열)의 크기
  • Excel 쓰기 : DataFrame.to_excel('파일경로', index=False)로 데이터프레임을 엑셀 파일로 저장할 수 있습니다. 엑셀은 여러 시트를 가질 수 있는데, 판다스는 기본적으로 첫 번째 시트에 저장합니다.
  • 여러 시트를 저장하려면 ExcelWriter 객체?????를 사용하여 df.to_excel(writer, sheet_name='Sheet1') 식으로 여러 데이터프레임을 다른 시트에 쓸 수 있습니다. 간단한 예:
orders.head(100).to_excel('orders_sample.xlsx', index=False)

# 이 코드는 "주문 데이터 상위 100개 행을 엑셀 파일로 저장"

 

실습예제 

작은 데이터프레임을 직접 만들어 Excel로 저장하고 다 시 불러오기

import pandas as pd

# 샘플 데이터프레임 생성
df_sample = pd.DataFrame({"X": [1, 2], "Y": [3, 4]})
# Excel로 저장
df_sample.to_excel("sample.xlsx", index=False)
# Excel로부터 읽기
df_new = pd.read_excel("sample.xlsx")
print(df_new)
--------------
   X  Y
0  1  3
1  2  4

 

 

JSON 파일 읽기 (pd.read_json)와 쓰기 (DataFrame.to_json)


  • JSON 읽기 : JSON은 웹에서 데이터를 주고받을 때 많이 쓰이는 구조화된 문자열 형식입니다. 판다스에서는 pd.read_json('파일경로')로 JSON 파일이나 문자열을 읽어서 데이터프레임으로 만들 수 있습니다. 단, JSON 구조가 표 형태로 바로 떨어지는 경우에 한합니다.
  • 예를 들어 다음과 같은 people.json 파일이 있다고 가정하겠습니다:
[
  {"name": "Alice", "age": 25, "city": "NY"},
  {"name": "Bob", "age": 30, "city": "LA"}
]   
 
 ➡️ 이름, 나이, 도시 정보가 담긴 JSON 배열
people = pd.read_json('people.json')
print(people)
------------------------------------
    name  age city
0  Alice   25   NY
1    Bob   30   LA

: ➡️ JSON 객체의 key값 = 컬럼명
  • JSON 쓰기
    • DataFrame.to_json('파일경로', orient='records') 형태로 데이터를 JSON 파일로 저장할 수 있습니다.
    • orient='records' 옵션을 주면 위 예시와 같이 리스트 내부에 각 행이 객체(record)로 표현된 JSON 형태로 저장됩니다 (orient='columns'로 저장하면 조금 다른 포맷이 되므로 일반적으로 'records'가 편합니다).