Pandas에서 가져오기

Pandas에서 가져오기

Pandas DataFrame을 일일이 등록하지 않아도, 쿼리 안에서 이름만으로 참조할 수 있어요. DuckDB가 대체 스캔(replacement scans) 덕분에 Python 프로세스 안의 DataFrame을 이름으로 찾아주거든요. DataFrame에서 테이블을 만들거나 기존 테이블에 삽입하는 방법을 정리해 볼게요.

출처: 공식문서

테이블 만들기와 삽입

CREATE TABLE ... ASINSERT INTO를 쓰면 어떤 쿼리로든 테이블을 만들 수 있어요. 쿼리에서 Pandas DataFrame을 참조해 테이블을 만들거나 기존 테이블에 삽입할 수 있어요. DataFrame을 수동으로 등록할 필요는 없어요. DuckDB는 대체 스캔 덕분에 Python 프로세스 안에서 이름으로 DataFrame을 찾아요.

import duckdb
import pandas

# Create a Pandas dataframe
my_df = pandas.DataFrame.from_dict({'a': [42]})

# create the table "my_table" from the DataFrame "my_df"
# Note: duckdb.sql connects to the default in-memory database connection
duckdb.sql("CREATE TABLE my_table AS SELECT * FROM my_df")

# insert into the table "my_table" from the DataFrame "my_df"
duckdb.sql("INSERT INTO my_table SELECT * FROM my_df")

DataFrame의 컬럼 순서가 다르거나 일부 컬럼이 없으면 INSERT INTO ... BY NAME을 사용해요:

duckdb.sql("INSERT INTO my_table BY NAME SELECT * FROM my_df")

또는 append 메서드가 SQL 쿼리를 쓰지 않고 DataFrame을 기존 테이블에 직접 추가해요. 컬럼을 위치가 아니라 이름으로 매칭하려면 by_name=True를 전달하세요:

con = duckdb.connect()
con.sql("CREATE TABLE my_table (a INTEGER)")
con.append("my_table", my_df)

관련 문서

DuckDB는 Pandas로 내보내기도 지원해요.

더 알아보기 (Learn more)