With a goal of minimizing dependencies, the gspread-models
package does not currently provide native pandas support. However it is very easy to implement, by following the guide below.
FYI: It is easy to construct a pandas DataFrame containing the information fetched from the sheet, by converting the records to a list of dictionaries:
from pandas import DataFrame
# fetch all records:
books = Book.all()
# convert to dataframe:
books_df = DataFrame([dict(book) for book in books])
books_df.head()
#> id title author year created_at
#> 1 To Kill a Mockingbird Harper Lee 1960 2024-05-22 21:36:25.582605+00:00
#> 2 1984 George Orwell 1949 2024-05-22 21:36:25.582738+00:00
#> 3 The Great Gatsby F. Scott Fitzgerald 1925 2024-05-22 21:36:25.582778+00:00
#> 4 The Catcher in the Rye J.D. Salinger 1951 2024-05-22 21:36:25.582813+00:00
#> 5 Pride and Prejudice Jane Austen 1813 2024-05-22 21:36:25.582846+00:00
It is possible to leverage inheritence to customize the behaviors of the base model, for example to create a method which returns all records in DataFrame format:
from gspread_models.base import BaseModel
from pandas import DataFrame
class MyBaseModel(BaseModel):
@classmethod
def records_to_df(cls):
objects = cls.all()
df = DataFrame([dict(obj) for obj in objects])
df.index = df["id"]
return df
MyBaseModel.bind(credentials_filepath="...", document_id="...")
This way, the child class(es) can have DataFrame support by default:
class MyBook(MyBaseModel):
SHEET_NAME = "books"
COLUMNS = ["title", "author", "year"]
books_df = MyBook.records_to_df()
books_df.head()
#> id title author year created_at
#> 1 To Kill a Mockingbird Harper Lee 1960 2024-05-22 21:36:25.582605+00:00
#> 2 1984 George Orwell 1949 2024-05-22 21:36:25.582738+00:00
#> 3 The Great Gatsby F. Scott Fitzgerald 1925 2024-05-22 21:36:25.582778+00:00
#> 4 The Catcher in the Rye J.D. Salinger 1951 2024-05-22 21:36:25.582813+00:00
#> 5 Pride and Prejudice Jane Austen 1813 2024-05-22 21:36:25.582846+00:00