[Python 기초]

[Python-Library] Pandas(2)

dyk98 2024. 11. 27. 19:36

Pandas (2) for importing data

pandas 로 데이터 불러오기 (’csv’, ‘json’, excel’)

## if there is not pandas installed 
#pip3 install pandas
import pandas as pd 
# head = row[0]
# CSV file 불러오기
df_csv = pd.read_csv('data.csv') ## head = True 값이 default

df_csv2 = pd.read_csv('data.csv', header = False) ## header 가 안나옴 

# URL에서 CSV 파일 불러오기 
url = '<https://kaggle.com/data.csv>'
df_csv_url = pd.read_csv(url)
print(df_csv_url.head())

## 다른 데이터들은 데이터 명만 다를뿐 비슷함!

# excel file 불러오기
df_excel = pd.read_excel('data.xlsx') ## head = True 값이 default

df_excel2 = pd.read_excel('data.xlsx', header = False) ## header 가 안나옴 

# URL에서 CSV 파일 불러오기 
url = '<https://kaggle.com/data.xlsx>'
df_excel_url = pd.read_excel(url)
print(df_excel_url.head())

## 엑셀의 경우 여럿의 sheet 가 존재하기에 그 sheet 를 불러오려면
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet2')
## sheet의 기본값 즉 첫 번째 시트는 (0)

##Json 
# JSON 파일 불러오기
df_json = pd.read_json('data.json')
print(df_json.head())
url = '<https://kaggle.com/data.json>'
df_json_url = pd.read_json(url)
print(df_json_url.head())
# test.json 내용: [{"name":"Jack","age":26},{"name":"Ace","age":87}]
 
## orient
df.to_json() # default : orient='columns'
# Output : '{"name":{"0":"Jack","1":"Ace"},"age":{"0":26,"1":87}}'
df.to_json(orient='records')
# Output : '[{"name":"Jack","age":26},{"name":"Ace","age":87}]'
df.to_json(orient='index')
# Output : '{"0":{"name":"Jack","age":26},"1":{"name":"Ace","age":87}}'
 
## json으로 쓰기
df.to_json('write.json',orient='index')
## -> pd.read_json()으로 json을 읽으면 orient를 자동으로 인식

# json 의 orient 를 잘 사용할필요가 있음! 
# orient 는 json type 의 database의 여러가지 형태로 만들때 사용함
# orient = "column" default
# orient = "records" => {columns:value} 형태의 딕셔너리 요서로 하는 리스트 형태
# orient = "split" => columns와 index, data를 key로 갖으며, value로는 각 내용을 리스트로 갖는 형태
# orient = "values" => 테이블에서 값만 리스트형태
# orient = "index" =>각 index를 키로 갖으며, value로는 {column:value} 형태의 딕셔너리를 갖습니다.

Orient가 어떤 종류든 자동 인식

Header 란?

데이터 베이스에서 보통 첫번째 줄에 해당되는 것! 보통 카테고리 나 어떤 데이터인지 알려주는 역할을 한다.

CSV 파일 저장하기

import pandas as pd

# 샘플 데이터프레임 생성
data = {'Name': ['Jack', 'Ace'], 'Age': [26, 87]}
df = pd.DataFrame(data)

# CSV 파일로 저장 (기본 옵션: 헤더 포함)
df.to_csv('output.csv', index=False)

# CSV 파일로 저장 (헤더 없이)
df.to_csv('output_no_header.csv', index=False, header=False)

# 특정 열만 저장
df.to_csv('output_subset.csv', index=False, columns=['Name'])

# 저장 후 확인
print(open('output.csv').read())

Excel 파일 저장하기

# Excel 파일로 저장 (기본 시트명은 "Sheet1")
df.to_excel('output.xlsx', index=False)

# 여러 시트 저장
with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    df.to_excel(writer, sheet_name='Sheet2', index=False)

# 특정 열만 저장
df.to_excel('output_subset.xlsx', index=False, columns=['Name'])

# 저장 후 확인
print("Excel 파일이 저장되었습니다.")

JSON 파일 저장하기

# JSON 파일로 저장 (기본 orient: "columns")
df.to_json('output_columns.json', orient='columns')

# JSON 파일로 저장 (orient="records")
df.to_json('output_records.json', orient='records')

# JSON 파일로 저장 (orient="index")
df.to_json('output_index.json', orient='index')

# 저장 후 확인
print(open('output_records.json').read())

CSV, Excel, JSON 파일 저장과 읽기 요약

파일 형식 저장 함수 (to_) 읽기 함수 (read_) 주요 옵션

CSV to_csv('file.csv', index=False) read_csv('file.csv') index, header, columns
Excel to_excel('file.xlsx', index=False) read_excel('file.xlsx') sheet_name, columns
JSON to_json('file.json', orient='records') read_json('file.json') orient

JSON Orient 옵션 요약

Orient 종류 설명 예제 출력

columns {column_name: {index: value}} 형태 (기본값) {"Name":{"0":"Jack","1":"Ace"},"Age":{"0":26,"1":87}}
records [{column_name: value}] 형태의 리스트 [{"Name":"Jack","Age":26},{"Name":"Ace","Age":87}]
index {index: {column_name: value}} 형태 {"0":{"Name":"Jack","Age":26},"1":{"Name":"Ace","Age":87}}
split {index: [...], columns: [...], data: [...]} 형태 {"index":[0,1],"columns":["Name","Age"],"data":[["Jack",26],["Ace",87]]}
values 값만 리스트 형태 ([ [values] ]) [["Jack",26],["Ace",87]]
  • CSV 파일은 일반 텍스트 기반이므로 용량이 작은 데이터에 적합.
  • Excel 파일은 시트 단위로 저장이 가능하며, 여러 시트를 저장하려면 ExcelWriter를 사용.
  • JSON 파일은 데이터 구조를 직관적으로 표현할 수 있으며, orient 옵션을 적절히 설정해야 응용 가능성이 높아짐.

SQL 데이터베이스에 데이터 저장하기

pandas 데이터프레임(DataFrame)을 SQL 데이터베이스에 저장하려면 pandas의 to_sql 메서드를 사용합니다. 이를 위해 데이터베이스 연결 객체를 생성해야 합니다.

import sqlite3

# SQLite 데이터베이스 연결
conn = sqlite3.connect('database.db')

# 데이터프레임을 SQL 테이블로 저장하기
df.to_sql('table_name', conn, if_exists='replace', index=False)

# 연결 종료
conn.close()

to_sql 주요 옵션

옵션 설명 기본값

name 저장할 테이블 이름을 지정합니다. 없음
con 데이터베이스 연결 객체를 지정합니다. (예: sqlite3.connect(), SQLAlchemy 연결 객체 등) 없음
if_exists 테이블이 이미 존재할 때의 동작을 지정합니다. 'fail'
  - 'replace': 기존 테이블을 삭제하고 새로 만듭니다.  
  - 'append': 기존 테이블에 데이터를 추가합니다.  
  - 'fail': 테이블이 이미 존재하면 에러를 발생시킵니다.  
index 데이터프레임의 인덱스 컬럼을 포함할지 여부를 지정합니다. (True=포함, False=포함하지 않음) True
dtype 데이터베이스에서 사용할 열 데이터 타입을 지정합니다. (예: { 'col1': 'TEXT', 'col2': 'INTEGER' }) None
chunksize 데이터를 한 번에 쓰는 행(row)의 개수를 지정합니다. None

주의 사항

  • if_exists 를 사용시:
    • replace는 기존 테이블 삭제 후 재생성하므로 데이터 손실에 주의해야 합니다.
    • append를 사용하면 기존 테이블에 데이터를 추가할 수 있습니다.
  • 데이터 타입 지정:
    • 자동으로 데이터 타입을 결정하지만, 명시적으로 지정하려면 dtype 옵션을 사용하세요.
  • 대량 데이터 처리:
    • 큰 데이터프레임의 경우 chunksize를 설정하여 부분적으로 데이터를 저장하는 것이 메모리 효율적입니다.