Pandas에서 가져오기
Pandas에서 가져오기
Pandas DataFrame을 일일이 등록하지 않아도, 쿼리 안에서 이름만으로 참조할 수 있어요. DuckDB가 대체 스캔(replacement scans) 덕분에 Python 프로세스 안의 DataFrame을 이름으로 찾아주거든요. DataFrame에서 테이블을 만들거나 기존 테이블에 삽입하는 방법을 정리해 볼게요.
출처: 공식문서
테이블 만들기와 삽입
CREATE TABLE ... AS와 INSERT 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로 내보내기도 지원해요.