[Pandas 강좌 – 2] Pandas(판다스)로 CSV, Excel, SQL 데이터 불러오고 저장하기

Pandas에서 CSV, Excel, SQL 사용하기

 

Pandas는 다양한 데이터 형식을 지원하며, 이를 활용하여 데이터를 불러오거나 저장할 수 있습니다. 이 포스트에서는 CSV, Excel, SQL 데이터베이스에서 데이터를 불러오고 저장하는 방법에 대해 자세히 설명하겠습니다.

 


1. Pandas에서 CSV 파일 사용하기

 

CSV(Comma Separated Values) 파일은 간단한 텍스트 기반 형식으로 데이터를 저장하는데 사용됩니다. CSV 파일의 각 행은 데이터 레코드를 나타내며, 각 레코드의 필드는 쉼표로 구분됩니다. CSV 파일은 표 형식의 데이터를 표현하는데 주로 사용됩니다. 아래는 5명의 학생들의 이름, 나이, 성별 데이터를 포함하는 CSV 파일의 간단한 예 입니다.

 

name,age,gender
John,20,M
Sarah,22,F
Bob,21,M
Alice,19,F
Tom,23,M

 

Pandas는 read_csv()함수를 통해 CSV 파일을 읽어들일 수 있습니다. read_csv 함수는 지정된 경로의 CSV 파일을 읽어들여 DataFrame으로 변환합니다.

 

import pandas as pd

# csv 파일을 불러옵니다.
df = pd.read_csv('students.csv')

# 데이터프레임을 출력합니다.
print(df)

#    name  age gender
#0   John   20      M
#1  Sarah   22      F
#2    Bob   21      M
#3  Alice   19      F
#4    Tom   23      M

 

 

read_csv() 함수의 주요 매개변수는 아래와 같습니다.

  • filepath_or_buffer : 파일 경로(문자열) 또는 유사한 객체를 지정합니다.
  • sep : 필드를 구분하는 데 사용되는 구분자를 지정합니다. 기본값은 ','입니다.
  • delimiter : sep와 같은 기능을 가진 매개변수입니다.
  • header : 열 이름으로 사용할 행 번호를 지정합니다. 기본값은 'infer'로, 열 이름이 있는 행을 자동으로 감지합니다.
  • names : 결과 데이터프레임의 열 이름 목록입니다.
  • index_col : 인덱스로 사용할 열 번호 또는 이름을 지정합니다.
  • usecols : 읽을 열의 번호나 이름의 리스트를 지정합니다.
  • dtype : 각 열의 데이터 타입을 지정합니다.
  • na_values : 결측치로 간주할 값을 지정합니다.

 

import pandas as pd

# 특정 열만 읽고, 열의 데이터 타입을 지정합니다.
df = pd.read_csv('students.csv', usecols=['name', 'age'], dtype={'age': 'int64'})

print(df)

#    name  age
#0   John   20
#1  Sarah   22
#2    Bob   21
#3  Alice   19
#4    Tom   23

 

 

to_csv()함수는 DataFrame을 CSV파일로 저장하는 데 사용되며, 아래와 같은 주요 매개변수를 가지고 있습니다.

  • path_or_buf : 파일 경로(문자열) 또는 유사한 객체를 지정합니다.
  • sep : 필드를 구분하는 데 사용되는 구분자를 지정합니다. 기본값은 ','입니다.
  • na_rep : 결측치를 나타내는 문자열을 지정합니다. 기본값은 ''입니다.
  • float_format : 부동 소수점 숫자를 포맷하는 문자열을 지정합니다.
  • columns : 저장할 열의 순서를 지정하는 리스트를 지정합니다. 기본적으로 모든 열이 저장됩니다.
  • header : 열 이름을 파일에 포함할지 여부를 지정합니다. 기본값은 True입니다.
  • index : 행 인덱스를 파일에 포함할지 여부를 지정합니다. 기본값은 True입니다.
  • index_label : 인덱스 열의 라벨을 지정합니다.
  • mode : 파일 열기 모드를 지정합니다. 기본값은 'w'입니다.

 

# 데이터프레임을 CSV 파일로 저장합니다. 인덱스는 저장하지 않습니다.
df.to_csv('students.csv', index=False)

 


2. Pandas에서 Excel 파일 사용하기

 

Pandas에서 Excel 파일을 읽고 저장하고 처리하는 것도 CSV 파일을 처리하는 방법과 매우 유사합니다. 다만 Excel파일을 처리할 때는 read_excel()함수와 to_excel()함수를 사용합니다. 아래는 5명의 학생들의 이름, 나이, 성별 데이터를 포함하는 excel 파일의 간단한 예 입니다.

 

 

 

read_excel()함수는 지정된 경로의 Excel 파일을 읽어들여 DataFrame으로 변환합니다.

 

 

import pandas as pd

# Excel 파일 불러오기
df = pd.read_excel('filename.xlsx')

# DataFrame을 출력
print(df)

#    name  age gender
#0   John   20      M
#1  Sarah   22      F
#2    Bob   21      M
#3  Alice   19      F
#4    Tom   23      M

 

 

아래는 read_excel()함수의 주요 매개변수입니다.

  • io : 파일 경로(문자열), 파일 객체, URL을 지정합니다.
  • sheet_name : 읽을 시트 이름이나 번호를 지정합니다. 기본값은 0입니다 (첫 번째 시트). 문자열, 정수, 문자열 리스트, 정수 리스트, None(모든 시트) 등을 지정할 수 있습니다.
  • header : 열 이름으로 사용할 행 번호를 지정합니다. 기본값은 0입니다 (첫 번째 행).
  • names : 결과 데이터프레임의 열 이름 목록입니다.
  • index_col : 인덱스로 사용할 열 번호 또는 이름을 지정합니다.
  • usecols : 읽을 열의 번호나 이름의 리스트를 지정합니다.
  • dtype : 각 열의 데이터 타입을 지정합니다.
  • na_values : 결측치로 간주할 값을 지정합니다.

 

 

import pandas as pd

# 특정 열만 읽고, 열의 데이터 타입을 지정합니다.
df = pd.read_excel('students.xlsx', usecols=['name', 'age'], dtype={'age': 'int64'})

print(df)

 

 

to_excel()함수는 DataFrame을 Excel파일로 저장하는 데 사용되며, 아래와 같은 주요 매개변수를 가지고 있습니다.

  • excel_writer : 파일 경로(문자열) 또는 ExcelWriter 객체를 지정합니다.
  • sheet_name : 시트의 이름을 문자열로 지정합니다. 기본값은 'Sheet1'입니다.
  • na_rep : 결측치를 나타내는 문자열을 지정합니다. 기본값은 ''입니다.
  • float_format : 부동 소수점 숫자를 포맷하는 문자열을 지정합니다.
  • columns : 저장할 열의 순서를 지정하는 리스트를 지정합니다. 기본적으로 모든 열이 저장됩니다.
  • header : 열 이름을 파일에 포함할지 여부를 지정합니다. 기본값은 True입니다.
  • index : 행 인덱스를 파일에 포함할지 여부를 지정합니다. 기본값은 True입니다.
  • index_label : 인덱스 열의 라벨을 지정합니다.
  • startrow : 데이터프레임을 시작할 최초 행 위치를 지정합니다. 기본값은 0입니다.
  • startcol : 데이터프레임을 시작할 최초 열 위치를 지정합니다. 기본값은 0입니다.

 

 

import pandas as pd

# 샘플 데이터프레임을 생성합니다.
data = {'name': ['John', 'Sarah', 'Bob', 'Alice', 'Tom'],
        'age': [20, 22, 21, 19, 23],
        'gender': ['M', 'F', 'M', 'F', 'M']}
df = pd.DataFrame(data)

# 데이터프레임을 Excel 파일로 저장합니다. 인덱스는 저장하지 않습니다.
df.to_excel('students.xlsx', index=False)

 


3. Pandas에서 SQL 데이터베이스 사용하기

 

Pandas는 SQL 쿼리 결과를 DataFrame으로 불러올 수 있습니다. read_sql_query 함수는 SQL 쿼리를 실행하고, 그 결과를 DataFrame으로 변환합니다. 아래 코드에서는 SQLite 데이터베이스와 연결을 생성하고, 해당 데이터베이스에 쿼리를 실행합니다.

 

import pandas as pd
import sqlite3

# SQLite 데이터베이스에 연결합니다.
conn = sqlite3.connect('students.db')

# SQL 쿼리의 결과를 데이터프레임으로 불러옵니다.
df = pd.read_sql_query("SELECT * FROM students", conn)

# 데이터프레임을 출력합니다.
print(df)

 

 

아래는 read_sql_query()함수의 주요 매개변수입니다.

  • sql : 실행할 SQL 쿼리를 문자열로 지정합니다.
  • con : 데이터베이스 연결 객체를 지정합니다. SQLAlchemy engine, sqlite3 connection 등을 사용할 수 있습니다.
  • index_col : 인덱스로 사용할 열의 이름을 지정합니다.
  • coerce_float : 기본값은 True입니다. 이는 가능한 경우 모든 숫자를 float로 변환합니다.
  • params : SQL 쿼리에 바인딩할 매개변수 목록 또는 사전을 지정합니다.
  • parse_dates : 날짜를 파싱할 열의 이름을 지정합니다.
  • chunksize : 쿼리 결과를 여러 개의 데이터프레임으로 나누어 반환합니다. 각 데이터프레임의 행 수는 chunksize에 의해 결정됩니다.

 

 

import pandas as pd
import sqlite3

# SQLite 데이터베이스에 연결합니다.
conn = sqlite3.connect('students.db')

# SQL 쿼리의 결과를 데이터프레임으로 불러옵니다.
# 여기서는 'age' 열이 20 이상인 행만 선택합니다.
df = pd.read_sql_query("SELECT * FROM students WHERE age >= 20", conn)

print(df)

# 데이터베이스 연결을 닫습니다.
conn.close()

 

 

to_sql()함수는 DataFrame을 데이터베이스의 테이블로 저장하는 데 사용되며, 아래와 같은 주요 매개변수를 가지고 있습니다.

  • name : SQL 데이터베이스에서 생성할 테이블의 이름을 지정합니다.
  • con : 데이터베이스 연결 객체를 지정합니다. SQLAlchemy engine, sqlite3 connection 등을 사용할 수 있습니다.
  • schema : SQLAlchemy schema를 지정합니다.
  • if_exists : 테이블이 이미 존재하는 경우의 동작을 지정합니다. 'fail', 'replace', 'append' 중 하나를 선택할 수 있습니다. 기본값은 'fail'입니다.
  • 'fail' : 기본값으로, 테이블이 이미 존재하면 아무 동작도 수행하지 않습니다.
  • 'replace' : 테이블이 이미 존재하면 기존 테이블을 제거하고 새로운 테이블을 생성합니다.
  • 'append' : 테이블이 이미 존재하면 새로운 데이터를 기존 테이블에 추가합니다.
  • index : 데이터프레임의 인덱스를 테이블에 저장할지 여부를 지정합니다. 기본값은 True입니다.
  • index_label : 인덱스 열의 라벨을 지정합니다.
  • chunksize : 한 번에 쓸 행의 수를 지정합니다. 이 매개변수를 사용하면 대용량 데이터를 처리하는 데 유용합니다.
  • dtype : 열의 SQL 타입을 지정하는 사전을 제공합니다.

 

 

import pandas as pd
import sqlite3

# 샘플 데이터프레임을 생성합니다.
data = {'name': ['John', 'Sarah', 'Bob', 'Alice', 'Tom'],
        'age': [20, 22, 21, 19, 23],
        'gender': ['M', 'F', 'M', 'F', 'M']}
df = pd.DataFrame(data)

# SQLite 데이터베이스에 연결합니다.
conn = sqlite3.connect('students.db')

# 데이터프레임을 SQLite 데이터베이스의 테이블로 저장합니다.
# 테이블이 이미 존재하는 경우에는 테이블을 대체합니다.
df.to_sql('students', conn, if_exists='replace', index=False)

# 데이터베이스 연결을 닫습니다.
conn.close()