From d59c0ae5bd51a8b2db3edf83d5e8a05ea4dd27b9 Mon Sep 17 00:00:00 2001
From: abhiram1809 <53875874+abhiram1809@users.noreply.github.com>
Date: Sat, 9 Mar 2024 10:56:52 +0530
Subject: [PATCH] Integration in Google Sheets Reader to load the Sheets into
 Pandas Dataframes (#11640)

* Updated base.py

Added reading Data as Pandas Dataframe Functionality.

* Update base.py Reading Fix

* Update base.py

Co-authored-by: Jayant <jayantverma9380@gmail.com>

* Update base.py Added Co-Author

Co-authored-by: Jayant <jayantverma9380@gmail.com>

* Basic Clean Up

* Revert "Basic Clean Up"

This reverts commit cafdfb681819ce3508c91d5a50e3f18609a6722a.

* Revert "Add mixedbread reranker cookbook (#11536)"

This reverts commit a88bc070313af3bd7ca4e7b278858fd2a83c4bb4.

* Cleans up and added Documentation for Google Readers

* Undo Reverts

* Grammar Fix

---------

Co-authored-by: Jayant Verma <98758438+jayantverma2809@users.noreply.github.com>
Co-authored-by: Jayant <jayantverma9380@gmail.com>
---
 .../data_connectors/GoogleSheetsDemo.ipynb    | 684 ++++++++++++++++++
 .../llama-index-readers-google/README.md      |  38 +-
 .../llama_index/readers/google/sheets/base.py |  53 ++
 .../llama-index-readers-google/pyproject.toml |   2 +-
 4 files changed, 775 insertions(+), 2 deletions(-)
 create mode 100644 docs/examples/data_connectors/GoogleSheetsDemo.ipynb

diff --git a/docs/examples/data_connectors/GoogleSheetsDemo.ipynb b/docs/examples/data_connectors/GoogleSheetsDemo.ipynb
new file mode 100644
index 0000000000..89358490b8
--- /dev/null
+++ b/docs/examples/data_connectors/GoogleSheetsDemo.ipynb
@@ -0,0 +1,684 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# **Google Sheets Reader**\n",
+    "Demonstrates Google Sheets Reader in LlamaIndex\n",
+    "\n",
+    "\n",
+    "*   Make Sure you have token.json or credentials.json file in the Environment, More on that [here](https://developers.google.com/workspace/guides/create-credentials)\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from llama_index.readers.google import GoogleSheetsReader"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Load Sheets as a List of Pandas Dataframe"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "list_of_sheets = [\"1ZF5iIeLLqROHbHsb1vOeRaLWKIgLU7rDDTSOZaqjpk0\"]\n",
+    "sheets = GoogleSheetsReader()\n",
+    "dataframes = sheets.load_data_in_pandas(list_of_sheets)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.google.colaboratory.intrinsic+json": {
+       "type": "dataframe"
+      },
+      "text/html": [
+       "\n",
+       "  <div id=\"df-4ccc2bf2-f9f3-4fcf-bc96-1b7ceb31689a\" class=\"colab-df-container\">\n",
+       "    <div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>spotify_id</th>\n",
+       "      <th>name</th>\n",
+       "      <th>artists</th>\n",
+       "      <th>daily_rank</th>\n",
+       "      <th>daily_movement</th>\n",
+       "      <th>weekly_movement</th>\n",
+       "      <th>country</th>\n",
+       "      <th>snapshot_date</th>\n",
+       "      <th>popularity</th>\n",
+       "      <th>is_explicit</th>\n",
+       "      <th>...</th>\n",
+       "      <th>key</th>\n",
+       "      <th>loudness</th>\n",
+       "      <th>mode</th>\n",
+       "      <th>speechiness</th>\n",
+       "      <th>acousticness</th>\n",
+       "      <th>instrumentalness</th>\n",
+       "      <th>liveness</th>\n",
+       "      <th>valence</th>\n",
+       "      <th>tempo</th>\n",
+       "      <th>time_signature</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>2HafqoJbgXdtjwCOvNEF14</td>\n",
+       "      <td>Si No Estás</td>\n",
+       "      <td>iñigo quintero</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>3</td>\n",
+       "      <td></td>\n",
+       "      <td>2023-10-27</td>\n",
+       "      <td>97</td>\n",
+       "      <td>FALSE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>5</td>\n",
+       "      <td>-8.72</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0.0285</td>\n",
+       "      <td>0.827</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.138</td>\n",
+       "      <td>0.524</td>\n",
+       "      <td>98.224</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>7x9aauaA9cu6tyfpHnqDLo</td>\n",
+       "      <td>Seven (feat. Latto) (Explicit Ver.)</td>\n",
+       "      <td>Jung Kook, Latto</td>\n",
+       "      <td>2</td>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td></td>\n",
+       "      <td>2023-10-27</td>\n",
+       "      <td>97</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>11</td>\n",
+       "      <td>-4.107</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0.0434</td>\n",
+       "      <td>0.311</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0815</td>\n",
+       "      <td>0.89</td>\n",
+       "      <td>124.997</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>3rUGC1vUpkDG9CZFHMur1t</td>\n",
+       "      <td>greedy</td>\n",
+       "      <td>Tate McRae</td>\n",
+       "      <td>3</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>2</td>\n",
+       "      <td></td>\n",
+       "      <td>2023-10-27</td>\n",
+       "      <td>99</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>6</td>\n",
+       "      <td>-3.18</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0319</td>\n",
+       "      <td>0.256</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.114</td>\n",
+       "      <td>0.844</td>\n",
+       "      <td>111.018</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>4MjDJD8cW7iVeWInc2Bdyj</td>\n",
+       "      <td>MONACO</td>\n",
+       "      <td>Bad Bunny</td>\n",
+       "      <td>4</td>\n",
+       "      <td>-1</td>\n",
+       "      <td>-3</td>\n",
+       "      <td></td>\n",
+       "      <td>2023-10-27</td>\n",
+       "      <td>96</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>4</td>\n",
+       "      <td>-5.009</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.068</td>\n",
+       "      <td>0.15</td>\n",
+       "      <td>0.000402</td>\n",
+       "      <td>0.58</td>\n",
+       "      <td>0.13</td>\n",
+       "      <td>139.056</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>7iQXYTyuG13aoeHxGG28Nh</td>\n",
+       "      <td>PERRO NEGRO</td>\n",
+       "      <td>Bad Bunny, Feid</td>\n",
+       "      <td>5</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td></td>\n",
+       "      <td>2023-10-27</td>\n",
+       "      <td>94</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>5</td>\n",
+       "      <td>-2.248</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0.262</td>\n",
+       "      <td>0.0887</td>\n",
+       "      <td>2.16E-05</td>\n",
+       "      <td>0.179</td>\n",
+       "      <td>0.345</td>\n",
+       "      <td>96.057</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>...</th>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "      <td>...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36395</th>\n",
+       "      <td>0AYt6NMyyLd0rLuvr0UkMH</td>\n",
+       "      <td>Slime You Out (feat. SZA)</td>\n",
+       "      <td>Drake, SZA</td>\n",
+       "      <td>46</td>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td>AE</td>\n",
+       "      <td>2023-10-18</td>\n",
+       "      <td>84</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>5</td>\n",
+       "      <td>-9.243</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0502</td>\n",
+       "      <td>0.508</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.259</td>\n",
+       "      <td>0.105</td>\n",
+       "      <td>88.88</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36396</th>\n",
+       "      <td>2Gk6fi0dqt91NKvlzGsmm7</td>\n",
+       "      <td>SAY MY GRACE (feat. Travis Scott)</td>\n",
+       "      <td>Offset, Travis Scott</td>\n",
+       "      <td>47</td>\n",
+       "      <td>3</td>\n",
+       "      <td>0</td>\n",
+       "      <td>AE</td>\n",
+       "      <td>2023-10-18</td>\n",
+       "      <td>80</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10</td>\n",
+       "      <td>-5.06</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0.0452</td>\n",
+       "      <td>0.0585</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.132</td>\n",
+       "      <td>0.476</td>\n",
+       "      <td>121.879</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36397</th>\n",
+       "      <td>26b3oVLrRUaaybJulow9kz</td>\n",
+       "      <td>People</td>\n",
+       "      <td>Libianca</td>\n",
+       "      <td>48</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>AE</td>\n",
+       "      <td>2023-10-18</td>\n",
+       "      <td>88</td>\n",
+       "      <td>FALSE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>10</td>\n",
+       "      <td>-7.621</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0678</td>\n",
+       "      <td>0.551</td>\n",
+       "      <td>1.31E-05</td>\n",
+       "      <td>0.102</td>\n",
+       "      <td>0.693</td>\n",
+       "      <td>124.357</td>\n",
+       "      <td>5</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36398</th>\n",
+       "      <td>5ydjxBSUIDn26MFzU3asP4</td>\n",
+       "      <td>Rainy Days</td>\n",
+       "      <td>V</td>\n",
+       "      <td>49</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>AE</td>\n",
+       "      <td>2023-10-18</td>\n",
+       "      <td>88</td>\n",
+       "      <td>FALSE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>9</td>\n",
+       "      <td>-8.016</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0875</td>\n",
+       "      <td>0.739</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.148</td>\n",
+       "      <td>0.282</td>\n",
+       "      <td>74.828</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>36399</th>\n",
+       "      <td>59NraMJsLaMCVtwXTSia8i</td>\n",
+       "      <td>Prada</td>\n",
+       "      <td>cassö, RAYE, D-Block Europe</td>\n",
+       "      <td>50</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>AE</td>\n",
+       "      <td>2023-10-18</td>\n",
+       "      <td>94</td>\n",
+       "      <td>TRUE</td>\n",
+       "      <td>...</td>\n",
+       "      <td>8</td>\n",
+       "      <td>-5.804</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0.0375</td>\n",
+       "      <td>0.001</td>\n",
+       "      <td>1.79E-06</td>\n",
+       "      <td>0.113</td>\n",
+       "      <td>0.422</td>\n",
+       "      <td>141.904</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "<p>36400 rows × 25 columns</p>\n",
+       "</div>\n",
+       "    <div class=\"colab-df-buttons\">\n",
+       "\n",
+       "  <div class=\"colab-df-container\">\n",
+       "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-4ccc2bf2-f9f3-4fcf-bc96-1b7ceb31689a')\"\n",
+       "            title=\"Convert this dataframe to an interactive table.\"\n",
+       "            style=\"display:none;\">\n",
+       "\n",
+       "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
+       "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
+       "  </svg>\n",
+       "    </button>\n",
+       "\n",
+       "  <style>\n",
+       "    .colab-df-container {\n",
+       "      display:flex;\n",
+       "      gap: 12px;\n",
+       "    }\n",
+       "\n",
+       "    .colab-df-convert {\n",
+       "      background-color: #E8F0FE;\n",
+       "      border: none;\n",
+       "      border-radius: 50%;\n",
+       "      cursor: pointer;\n",
+       "      display: none;\n",
+       "      fill: #1967D2;\n",
+       "      height: 32px;\n",
+       "      padding: 0 0 0 0;\n",
+       "      width: 32px;\n",
+       "    }\n",
+       "\n",
+       "    .colab-df-convert:hover {\n",
+       "      background-color: #E2EBFA;\n",
+       "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
+       "      fill: #174EA6;\n",
+       "    }\n",
+       "\n",
+       "    .colab-df-buttons div {\n",
+       "      margin-bottom: 4px;\n",
+       "    }\n",
+       "\n",
+       "    [theme=dark] .colab-df-convert {\n",
+       "      background-color: #3B4455;\n",
+       "      fill: #D2E3FC;\n",
+       "    }\n",
+       "\n",
+       "    [theme=dark] .colab-df-convert:hover {\n",
+       "      background-color: #434B5C;\n",
+       "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
+       "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
+       "      fill: #FFFFFF;\n",
+       "    }\n",
+       "  </style>\n",
+       "\n",
+       "    <script>\n",
+       "      const buttonEl =\n",
+       "        document.querySelector('#df-4ccc2bf2-f9f3-4fcf-bc96-1b7ceb31689a button.colab-df-convert');\n",
+       "      buttonEl.style.display =\n",
+       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
+       "\n",
+       "      async function convertToInteractive(key) {\n",
+       "        const element = document.querySelector('#df-4ccc2bf2-f9f3-4fcf-bc96-1b7ceb31689a');\n",
+       "        const dataTable =\n",
+       "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
+       "                                                    [key], {});\n",
+       "        if (!dataTable) return;\n",
+       "\n",
+       "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
+       "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
+       "          + ' to learn more about interactive tables.';\n",
+       "        element.innerHTML = '';\n",
+       "        dataTable['output_type'] = 'display_data';\n",
+       "        await google.colab.output.renderOutput(dataTable, element);\n",
+       "        const docLink = document.createElement('div');\n",
+       "        docLink.innerHTML = docLinkHtml;\n",
+       "        element.appendChild(docLink);\n",
+       "      }\n",
+       "    </script>\n",
+       "  </div>\n",
+       "\n",
+       "\n",
+       "<div id=\"df-20b9ad5c-7f90-4949-bdcd-04f7e531ec10\">\n",
+       "  <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-20b9ad5c-7f90-4949-bdcd-04f7e531ec10')\"\n",
+       "            title=\"Suggest charts\"\n",
+       "            style=\"display:none;\">\n",
+       "\n",
+       "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
+       "     width=\"24px\">\n",
+       "    <g>\n",
+       "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
+       "    </g>\n",
+       "</svg>\n",
+       "  </button>\n",
+       "\n",
+       "<style>\n",
+       "  .colab-df-quickchart {\n",
+       "      --bg-color: #E8F0FE;\n",
+       "      --fill-color: #1967D2;\n",
+       "      --hover-bg-color: #E2EBFA;\n",
+       "      --hover-fill-color: #174EA6;\n",
+       "      --disabled-fill-color: #AAA;\n",
+       "      --disabled-bg-color: #DDD;\n",
+       "  }\n",
+       "\n",
+       "  [theme=dark] .colab-df-quickchart {\n",
+       "      --bg-color: #3B4455;\n",
+       "      --fill-color: #D2E3FC;\n",
+       "      --hover-bg-color: #434B5C;\n",
+       "      --hover-fill-color: #FFFFFF;\n",
+       "      --disabled-bg-color: #3B4455;\n",
+       "      --disabled-fill-color: #666;\n",
+       "  }\n",
+       "\n",
+       "  .colab-df-quickchart {\n",
+       "    background-color: var(--bg-color);\n",
+       "    border: none;\n",
+       "    border-radius: 50%;\n",
+       "    cursor: pointer;\n",
+       "    display: none;\n",
+       "    fill: var(--fill-color);\n",
+       "    height: 32px;\n",
+       "    padding: 0;\n",
+       "    width: 32px;\n",
+       "  }\n",
+       "\n",
+       "  .colab-df-quickchart:hover {\n",
+       "    background-color: var(--hover-bg-color);\n",
+       "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
+       "    fill: var(--button-hover-fill-color);\n",
+       "  }\n",
+       "\n",
+       "  .colab-df-quickchart-complete:disabled,\n",
+       "  .colab-df-quickchart-complete:disabled:hover {\n",
+       "    background-color: var(--disabled-bg-color);\n",
+       "    fill: var(--disabled-fill-color);\n",
+       "    box-shadow: none;\n",
+       "  }\n",
+       "\n",
+       "  .colab-df-spinner {\n",
+       "    border: 2px solid var(--fill-color);\n",
+       "    border-color: transparent;\n",
+       "    border-bottom-color: var(--fill-color);\n",
+       "    animation:\n",
+       "      spin 1s steps(1) infinite;\n",
+       "  }\n",
+       "\n",
+       "  @keyframes spin {\n",
+       "    0% {\n",
+       "      border-color: transparent;\n",
+       "      border-bottom-color: var(--fill-color);\n",
+       "      border-left-color: var(--fill-color);\n",
+       "    }\n",
+       "    20% {\n",
+       "      border-color: transparent;\n",
+       "      border-left-color: var(--fill-color);\n",
+       "      border-top-color: var(--fill-color);\n",
+       "    }\n",
+       "    30% {\n",
+       "      border-color: transparent;\n",
+       "      border-left-color: var(--fill-color);\n",
+       "      border-top-color: var(--fill-color);\n",
+       "      border-right-color: var(--fill-color);\n",
+       "    }\n",
+       "    40% {\n",
+       "      border-color: transparent;\n",
+       "      border-right-color: var(--fill-color);\n",
+       "      border-top-color: var(--fill-color);\n",
+       "    }\n",
+       "    60% {\n",
+       "      border-color: transparent;\n",
+       "      border-right-color: var(--fill-color);\n",
+       "    }\n",
+       "    80% {\n",
+       "      border-color: transparent;\n",
+       "      border-right-color: var(--fill-color);\n",
+       "      border-bottom-color: var(--fill-color);\n",
+       "    }\n",
+       "    90% {\n",
+       "      border-color: transparent;\n",
+       "      border-bottom-color: var(--fill-color);\n",
+       "    }\n",
+       "  }\n",
+       "</style>\n",
+       "\n",
+       "  <script>\n",
+       "    async function quickchart(key) {\n",
+       "      const quickchartButtonEl =\n",
+       "        document.querySelector('#' + key + ' button');\n",
+       "      quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
+       "      quickchartButtonEl.classList.add('colab-df-spinner');\n",
+       "      try {\n",
+       "        const charts = await google.colab.kernel.invokeFunction(\n",
+       "            'suggestCharts', [key], {});\n",
+       "      } catch (error) {\n",
+       "        console.error('Error during call to suggestCharts:', error);\n",
+       "      }\n",
+       "      quickchartButtonEl.classList.remove('colab-df-spinner');\n",
+       "      quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
+       "    }\n",
+       "    (() => {\n",
+       "      let quickchartButtonEl =\n",
+       "        document.querySelector('#df-20b9ad5c-7f90-4949-bdcd-04f7e531ec10 button');\n",
+       "      quickchartButtonEl.style.display =\n",
+       "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
+       "    })();\n",
+       "  </script>\n",
+       "</div>\n",
+       "\n",
+       "    </div>\n",
+       "  </div>\n"
+      ],
+      "text/plain": [
+       "                   spotify_id                                 name  \\\n",
+       "0      2HafqoJbgXdtjwCOvNEF14                          Si No Estás   \n",
+       "1      7x9aauaA9cu6tyfpHnqDLo  Seven (feat. Latto) (Explicit Ver.)   \n",
+       "2      3rUGC1vUpkDG9CZFHMur1t                               greedy   \n",
+       "3      4MjDJD8cW7iVeWInc2Bdyj                               MONACO   \n",
+       "4      7iQXYTyuG13aoeHxGG28Nh                          PERRO NEGRO   \n",
+       "...                       ...                                  ...   \n",
+       "36395  0AYt6NMyyLd0rLuvr0UkMH            Slime You Out (feat. SZA)   \n",
+       "36396  2Gk6fi0dqt91NKvlzGsmm7    SAY MY GRACE (feat. Travis Scott)   \n",
+       "36397  26b3oVLrRUaaybJulow9kz                               People   \n",
+       "36398  5ydjxBSUIDn26MFzU3asP4                           Rainy Days   \n",
+       "36399  59NraMJsLaMCVtwXTSia8i                                Prada   \n",
+       "\n",
+       "                           artists daily_rank daily_movement weekly_movement  \\\n",
+       "0                   iñigo quintero          1              0               3   \n",
+       "1                 Jung Kook, Latto          2              4               0   \n",
+       "2                       Tate McRae          3             -1               2   \n",
+       "3                        Bad Bunny          4             -1              -3   \n",
+       "4                  Bad Bunny, Feid          5              0               1   \n",
+       "...                            ...        ...            ...             ...   \n",
+       "36395                   Drake, SZA         46              4               0   \n",
+       "36396         Offset, Travis Scott         47              3               0   \n",
+       "36397                     Libianca         48              2               0   \n",
+       "36398                            V         49              1               0   \n",
+       "36399  cassö, RAYE, D-Block Europe         50              0               0   \n",
+       "\n",
+       "      country snapshot_date popularity is_explicit  ... key loudness mode  \\\n",
+       "0                2023-10-27         97       FALSE  ...   5    -8.72    1   \n",
+       "1                2023-10-27         97        TRUE  ...  11   -4.107    1   \n",
+       "2                2023-10-27         99        TRUE  ...   6    -3.18    0   \n",
+       "3                2023-10-27         96        TRUE  ...   4   -5.009    0   \n",
+       "4                2023-10-27         94        TRUE  ...   5   -2.248    1   \n",
+       "...       ...           ...        ...         ...  ...  ..      ...  ...   \n",
+       "36395      AE    2023-10-18         84        TRUE  ...   5   -9.243    0   \n",
+       "36396      AE    2023-10-18         80        TRUE  ...  10    -5.06    1   \n",
+       "36397      AE    2023-10-18         88       FALSE  ...  10   -7.621    0   \n",
+       "36398      AE    2023-10-18         88       FALSE  ...   9   -8.016    0   \n",
+       "36399      AE    2023-10-18         94        TRUE  ...   8   -5.804    1   \n",
+       "\n",
+       "      speechiness acousticness instrumentalness liveness valence    tempo  \\\n",
+       "0          0.0285        0.827                0    0.138   0.524   98.224   \n",
+       "1          0.0434        0.311                0   0.0815    0.89  124.997   \n",
+       "2          0.0319        0.256                0    0.114   0.844  111.018   \n",
+       "3           0.068         0.15         0.000402     0.58    0.13  139.056   \n",
+       "4           0.262       0.0887         2.16E-05    0.179   0.345   96.057   \n",
+       "...           ...          ...              ...      ...     ...      ...   \n",
+       "36395      0.0502        0.508                0    0.259   0.105    88.88   \n",
+       "36396      0.0452       0.0585                0    0.132   0.476  121.879   \n",
+       "36397      0.0678        0.551         1.31E-05    0.102   0.693  124.357   \n",
+       "36398      0.0875        0.739                0    0.148   0.282   74.828   \n",
+       "36399      0.0375        0.001         1.79E-06    0.113   0.422  141.904   \n",
+       "\n",
+       "      time_signature  \n",
+       "0                  4  \n",
+       "1                  4  \n",
+       "2                  1  \n",
+       "3                  4  \n",
+       "4                  4  \n",
+       "...              ...  \n",
+       "36395              3  \n",
+       "36396              4  \n",
+       "36397              5  \n",
+       "36398              4  \n",
+       "36399              4  \n",
+       "\n",
+       "[36400 rows x 25 columns]"
+      ]
+     },
+     "execution_count": null,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "dataframes[0]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Or Load Sheets as a List of Document Objects"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "documents = sheets.load_data(list_of_sheets)"
+   ]
+  }
+ ],
+ "metadata": {
+  "colab": {
+   "provenance": []
+  },
+  "kernelspec": {
+   "display_name": "Python 3",
+   "name": "python3"
+  },
+  "language_info": {
+   "name": "python"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/llama-index-integrations/readers/llama-index-readers-google/README.md b/llama-index-integrations/readers/llama-index-readers-google/README.md
index 1e86347f51..bc2095634d 100644
--- a/llama-index-integrations/readers/llama-index-readers-google/README.md
+++ b/llama-index-integrations/readers/llama-index-readers-google/README.md
@@ -1 +1,37 @@
-# LlamaIndex Readers Integration: Google
+# LlamaIndex Integration: Google Readers
+
+Effortlessly incorporate Google-based data loaders into your Python workflow using LlamaIndex. Unlock the potential of various readers to enhance your data loading capabilities. Below are examples of integrating Google Docs and Google Sheets readers:
+
+### Google Docs Reader
+
+```python
+from llama_index.readers.google import GoogleDocsReader
+
+# Specify the document IDs you want to load
+document_ids = ["<document_id>"]
+
+# Load data from Google Docs
+documents = GoogleDocsReader().load_data(document_ids=document_ids)
+```
+
+### Google Sheets Reader (Documents and Dataframes)
+
+```python
+from llama_index.readers.google import GoogleSheetsReader
+
+# Specify the list of sheet IDs you want to load
+list_of_sheets = ["spreadsheet_id"]
+
+# Create a Google Sheets Reader instance
+sheets_reader = GoogleSheetsReader()
+
+# Load data into Pandas in Data Classes of choice (Documents or Dataframes)
+documents = sheets.load_data(list_of_sheets)
+dataframes = sheets_reader.load_data_in_pandas(list_of_sheets)
+```
+
+Integrate these readers seamlessly to efficiently manage and process your data within your Python environment, providing a robust foundation for your data-driven workflows with LlamaIndex.
+
+### Note
+
+Make sure you have a "token.json" or a "credentials.json" file in your environment to authenticate the Google Cloud Platform
diff --git a/llama-index-integrations/readers/llama-index-readers-google/llama_index/readers/google/sheets/base.py b/llama-index-integrations/readers/llama-index-readers-google/llama_index/readers/google/sheets/base.py
index f95d877155..abf3a25a2f 100644
--- a/llama-index-integrations/readers/llama-index-readers-google/llama_index/readers/google/sheets/base.py
+++ b/llama-index-integrations/readers/llama-index-readers-google/llama_index/readers/google/sheets/base.py
@@ -2,6 +2,7 @@
 
 import logging
 import os
+import pandas as pd
 from typing import Any, List
 
 import googleapiclient.discovery as discovery
@@ -79,6 +80,21 @@ class GoogleSheetsReader(BasePydanticReader):
             )
         return results
 
+    def load_data_in_pandas(self, spreadsheet_ids: List[str]) -> List[pd.DataFrame]:
+        """Load data from the input directory.
+
+        Args:
+            spreadsheet_ids (List[str]): a list of document ids.
+        """
+        if spreadsheet_ids is None:
+            raise ValueError('Must specify a "spreadsheet_ids" in `load_kwargs`.')
+
+        results = []
+        for spreadsheet_id in spreadsheet_ids:
+            dataframes = self._load_sheet_in_pandas(spreadsheet_id)
+            results.extend(dataframes)
+        return results
+
     def _load_sheet(self, spreadsheet_id: str) -> str:
         """Load a sheet from Google Sheets.
 
@@ -115,6 +131,43 @@ class GoogleSheetsReader(BasePydanticReader):
             )
         return sheet_text
 
+    def _load_sheet_in_pandas(self, spreadsheet_id: str) -> List[pd.DataFrame]:
+        """Load a sheet from Google Sheets.
+
+        Args:
+            spreadsheet_id: the sheet id.
+            sheet_name: the sheet name.
+
+        Returns:
+            The sheet data.
+        """
+        credentials = self._get_credentials()
+        sheets_service = discovery.build("sheets", "v4", credentials=credentials)
+        sheet = sheets_service.spreadsheets()
+        spreadsheet_data = sheet.get(spreadsheetId=spreadsheet_id).execute()
+        sheets = spreadsheet_data.get("sheets")
+        dataframes = []
+        for sheet in sheets:
+            properties = sheet.get("properties")
+            title = properties.get("title")
+            grid_props = properties.get("gridProperties")
+            rows = grid_props.get("rowCount")
+            cols = grid_props.get("columnCount")
+            range_pattern = f"{title}!R1C1:R{rows}C{cols}"
+            response = (
+                sheets_service.spreadsheets()
+                .values()
+                .get(spreadsheetId=spreadsheet_id, range=range_pattern)
+                .execute()
+            )
+            values = response.get("values", [])
+            if not values:
+                print(f"No data found in {title}")
+            else:
+                df = pd.DataFrame(values[1:], columns=values[0])
+                dataframes.append(df)
+        return dataframes
+
     def _get_credentials(self) -> Any:
         """Get valid user credentials from storage.
 
diff --git a/llama-index-integrations/readers/llama-index-readers-google/pyproject.toml b/llama-index-integrations/readers/llama-index-readers-google/pyproject.toml
index 79a58c4159..c962ed7937 100644
--- a/llama-index-integrations/readers/llama-index-readers-google/pyproject.toml
+++ b/llama-index-integrations/readers/llama-index-readers-google/pyproject.toml
@@ -34,7 +34,7 @@ license = "MIT"
 maintainers = ["bbornsztein", "jerryjliu", "ong", "piroz", "pycui", "ravi03071991"]
 name = "llama-index-readers-google"
 readme = "README.md"
-version = "0.1.4"
+version = "0.1.5"
 
 [tool.poetry.dependencies]
 python = ">=3.10,<4.0"
-- 
GitLab