Python Connector와 함께 pandas DataFrames 사용하기¶
pandas는 데이터 분석을 위한 라이브러리입니다. pandas를 사용하면 DataFrame이라는 데이터 구조를 사용하여 2차원 데이터(예: 데이터베이스 테이블의 데이터)를 분석 및 조작할 수 있습니다.
자세한 내용은 pandas 설명서를 참조하십시오.
Snowflake 데이터베이스의 데이터를 pandas DataFrame으로 가져오려면 Python용 Snowflake 커넥터에서 제공되는 API 메서드를 사용할 수 있습니다. 이 커넥터는 pandas DataFrame에서 Snowflake 데이터베이스로 데이터를 쓰기 위한 API 메서드로 제공합니다.
참고
이러한 API 메서드 중 일부에서는 특정 PyArrow 라이브러리 버전이 필요합니다. 자세한 내용은 요구 사항 을 참조하십시오.
자세한 내용은 PyArrow 라이브러리 설명서를 참조하십시오.
이 항목의 내용:
요구 사항¶
현재, Python 커넥터 API의 pandas 지향 API 메서드는 다음에서 동작합니다.
- Python용 Snowflake Connector 2.1.2 이상. 
- 커넥터 버전에 따라 PyArrow 라이브러리 버전 3.0.x 이상. - PyArrow를 설치하지 않은 경우에는 PyArrow를 설치할 필요가 없습니다. 아래의 설명과 같이 Python Connector를 설치하면 PyArrow의 적절한 버전이 자동으로 설치됩니다. - 조심 - 위의 권장 버전이 아닌 PyArrow 라이브러리 버전을 이미 설치한 경우에는 PyArrow의 설치를 제거한 후 Python용 Snowflake 커넥터를 설치하십시오. Python용 Snowflake 커넥터를 설치한 후에 다른 PyArrow 버전을 다시 설치하지 마십시오. - 자세한 내용은 PyArrow 라이브러리 설명서를 참조하십시오. 
- 커넥터 버전에 따라 pandas 0.25.2 이상. 이전 버전은 동작할 수 있지만, 테스트가 수행되지 않았습니다. 
설치¶
Python용 Snowflake 커넥터의 pandas 호환 버전을 설치하려면 다음 명령을 실행합니다.
pip install "snowflake-connector-python[pandas]"
명령에서와 같이 대괄호([ 및 ])를 반드시 입력해야 합니다. 대괄호는 설치할 패키지의 추가 부분을 지정합니다.
자세한 내용은 extras Python 종속성을 참조하십시오.
예에서와 같이 패키지 이름 주위에 따옴표를 사용하여 대괄호가 와일드카드로 해석되지 않도록 합니다.
다른 추가 항목(예: 브라우저 기반SSO를 사용한 연결 캐싱 또는 MFA 토큰 캐싱을 위한 secure-local-storage)을 설치해야 하는 경우에는 추가 항목 사이에 쉼표를 사용합니다.
pip install "snowflake-connector-python[secure-local-storage,pandas]"
Snowflake 데이터베이스에서 pandas DataFrame으로 데이터 읽기¶
pandas DataFrame로 데이터를 읽으려면, Cursor 를 사용하여 데이터를 검색한 후 이러한 Cursor 메서드 중 하나를 호출하여 데이터를 pandas DataFrame에 추가합니다.
pandas DataFrame에서 Snowflake 데이터베이스로 데이터 쓰기¶
pandas DataFrame에서 Snowflake 데이터베이스로 데이터를 쓰려면, 다음 중 1개 를 수행합니다.
- write_pandas()함수를 호출합니다.
- pandas.DataFrame.to_sql()메서드를 호출합니다.- 자세한 내용은 pandas.DataFrame.to_sql 설명서를 참조하고, 데이터베이스에 데이터를 삽입하는 데 사용할 메서드로 - pd_writer()를 지정합니다.
Snowflake에서 pandas로 데이터 매핑¶
아래 테이블은 Snowflake 데이터 타입에서 pandas 데이터 타입으로의 매핑을 보여줍니다.
| Snowflake 데이터 타입 | pandas 데이터 타입 | 
|---|---|
| FIXED NUMERIC 타입(소수 자릿수 = 0), DECIMAL 제외 | 
 | 
| FIXED NUMERIC 타입(소수 자릿수 > 0), DECIMAL 제외 | 
 | 
| FIXED NUMERIC 타입 DECIMAL | 
 | 
| FLOAT/DOUBLE | 
 | 
| VARCHAR | 
 | 
| BINARY | 
 | 
| VARIANT | 
 | 
| DATE | 
 | 
| TIME | 
 | 
| TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ | 
 | 
참고:
- Snowflake 데이터 타입이 FIXED NUMERIC이고 소수 자릿수가 0이며 값이 NULL인 경우, 값은 정수 타입이 아닌 - float64로 변환됩니다.
- 변환에서 오버플로가 발생하는 경우 Python 커넥터에서 예외가 throw됩니다. 
pandas 가져오기¶
관례적으로 pandas는 다음 문을 통해 가져옵니다.
import pandas as pd
pandas 오브젝트에 대한 참조는 pandas.object 또는 pd.object 로 확인할 수 있습니다.
pandas DataFrames로 마이그레이션하기¶
이 섹션의 주 대상은 이전에 pandas(및 아마도 SQLAlchemy)를 사용한 경험이 있는 사용자입니다.
이전 pandas 사용자는 다음 중 하나와 유사한 코드를 사용했을 것입니다.
- 이 예에서는 Python 커넥터에서 pandas DataFrame을 생성하기 위한 원래 방법을 보여줍니다. - import pandas as pd def fetch_pandas_old(cur, sql): cur.execute(sql) rows = 0 while True: dat = cur.fetchmany(50000) if not dat: break df = pd.DataFrame(dat, columns=cur.description) rows += df.shape[0] print(rows) 
- 이 예에서는 SQLAlchemy를 사용하여 pandas DataFrame을 생성하는 방법을 보여줍니다. - import pandas as pd def fetch_pandas_sqlalchemy(sql): rows = 0 for chunk in pd.read_sql_query(sql, engine, chunksize=50000): rows += chunk.shape[0] print(rows) 
앞의 예시 중 1개와 유사한 코드는 이 항목의 Snowflake 데이터베이스에서 pandas DataFrame으로 데이터 읽기 에서 제공되는 Python 커넥터 pandas API 호출을 사용하도록 변환할 수 있습니다.
참고
Python 커넥터에서 pandas가 지원됨으로써, 더 이상 SQLAlchemy가 커서의 데이터를 DataFrame으로 변환할 필요가 없습니다.
그러나 원하면 SQLAlchemy를 계속해서 사용할 수 있으며, Python 커넥터는 SQLAlchemy와 계속해서 호환됩니다.