[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를 설정하여 부분적으로 데이터를 저장하는 것이 메모리 효율적입니다.