본문 바로가기
  • 데이터야 놀자
데이터 분석 환경

구글 쉬트(Sheets) 데이터 파이썬 연동 방법

by 데이터랑 2026. 8. 21.

 

1단계 : 구글콘솔에서 연동 키 생성

 

  • Google Cloud Console에 접속
  • 새 프로젝트를 만들거나 기존 프로젝트를 클릭
  • 상단 검색창에 "Google Sheets API"를 검색하고 [사용] 클릭
  • Google Drive API도 함께 "사용" 설정  (이것은 키생성은 별도로 하지 않음)
  • 좌측 메뉴에서 [사용자 인증 정보] -> 상단의 [사용자 인증 정보 만들기] 
  • 사용자 인증정보 만들 때 액세스할 데이터 선택은?
  • 화면에 [사용자 데이터]와 [애플리케이션 데이터] 두 가지 옵션 [애플리케이션 데이터]를 선택 ( 사람이 직접 로그인해서 타인의 개인 정보를 가져오는 것이 아니라, 내 프로그램(파이썬 봇)이 백그라운드에서 구글 시트 같은 자원을 제어)
  • [서비스 계정]을 선택 하고 서비스 계정 생성
  • 서비스계정이름과 ID 작성 기준?
  • 어떤 용도인지 한눈에 알 수 있는 이름 한글, 영문, 띄어쓰기 모두 사용 가능
  • 서비스 계정 ID : 이름을 입력하면 자동으로  채워짐
  • 권한이나 주구성원은 건너뛰기해도 무방 ('구글 시트 문서' 하나만 읽고 쓰면 되기 때문에) 혼자서 개발하고 사용하는 개인 프로젝트라면 본인 계정 하나로 충분하므로, 이 칸 역시 아무도 추가하지 않고 비워둠
  • 생성된 서비스 계정 들어가기 
  • Google Cloud Console(console.cloud.google.com) 상단 검색창 옆의 [탐색 메뉴](줄 세 개 ≡ 아이콘)를 클릭
  • 메뉴 목록에서 [IAM 및 관리자] 항목 선택 - [서비스 계정]을 클릭
  • 생성한 서비스 계정 목록이 보이고 클릭 
  • 연동 키 생성
  • 상단 탭 중 [키(Keys)]로 이동하여 [키 추가] ->
  • [새 키 생성] -> [JSON]을 선택해 컴퓨터에 다운로드
  • 다운로드한 JSON 파일에서 client_email 주소 복사

 

2단계 : 파이썬에서 연동 필요한 라이브러리 설치

 

pip install gspread google-auth

 

 

3단계 : 구글 쉬트 공유 설정해야함

 

  • 구글 시트 상단의 [공유] 버튼을 누르면 나오는 팝업창에서 [사용자 및 그룹 추가]라고 적힌 입력창 JSON 파일 내부에 있는 client_email 주소값을 복사
  • 권한 설정창(보통 '뷰어'가 기본값)을 클릭해서 [편집자]로 변경 설정
  • 전송 버튼 클릭

 

4단계 : 파이썬에서 연동 코드 작성

 

 

iimport gspread
from google.oauth2.service_account import Credentials
import pandas as pd

# 1. 인증 설정
json_file = 'gg_sheets_service_key.json'
scopes = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive']

# 2. 인증 및 연결
creds = Credentials.from_service_account_file(json_file, scopes=scopes)
client = gspread.authorize(creds)

# 3. 시트 열기 및 데이터 가져오기
spreadsheet = client.open('내 구글 시트 제목')
  
# '내 시트' 파일 안의 '매매일지'라는 이름의 탭을 가져옴
worksheet = spreadsheet.worksheet('매매일지')

###------- 방법 1  : 전체 읽어오기 ----------------###
rows = worksheet.get_all_values()    ## (이건 헤더가 완벽해야 함)

# 첫 번째 줄(헤더)과 나머지 데이터 분리하기
header = rows[0]  # 첫 번째 행 (열 이름들)
content = rows[1:] # 두 번째 행부터의 실제 데이터
print("헤더:", header)
print("상위 데이터:", content[:5])

###------- 방법 2  : 일부  읽어오기 ----------------###

# 1구역: A1부터 F7까지 (헤더 포함 여부에 따라 슬라이싱 조정)
data_zone1 = worksheet.get('A1:F7')
if data_zone1:
    df_zone1 = pd.DataFrame(data_zone1[1:], columns=data_zone1[0])
else:
    df_zone1 = pd.DataFrame()
print("--- [1구역: A1:F7] ---")
print(df_zone1.head())

 


 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글