Skip to content

Commit 1006bfc

Browse files
committed
can now retrieve full sheet range as pandas.DataFrame
1 parent fbac93c commit 1006bfc

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ build/
1111
.cache/
1212
.env
1313
env.sh
14+
.vscode/

google_objects/sheets/core.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import logging
1111
from datetime import datetime
1212

13+
import pandas
14+
1315
from .. import GoogleClient, GoogleObject
1416

1517
log = logging.getLogger(__name__)
@@ -227,6 +229,10 @@ def yield_sheets(self):
227229
for sheet in self.data['sheets']:
228230
yield Sheet.from_existing(sheet, self)
229231

232+
def yield_values(self, arg1):
233+
for sheet in self.yield_sheets():
234+
yield sheet.values()
235+
230236
def get_range(self, sheet_range):
231237
"""Takes a sheet range and initializes a block object
232238
with the raw data and the spreadsheet for update
@@ -392,7 +398,9 @@ def values(self, start=None, end=None):
392398
block.spreadsheet = self.spreadsheet
393399

394400
return block
395-
401+
402+
def frame(self):
403+
return self.values().as_df()
396404

397405
class Block(GoogleObject):
398406

@@ -438,6 +446,12 @@ def yield_rows(self):
438446
def rows(self):
439447
return [row for row in self.yield_rows()]
440448

449+
def as_df(self, header=True):
450+
df = pandas.DataFrame(self.rows())
451+
if header:
452+
return df.rename(columns=df.iloc[0])
453+
return df
454+
441455
@property
442456
def values(self):
443457
return self.data['values']

tests/sheets_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import unittest
22
from unittest import mock
33

4+
import pandas
5+
46
from tests.utils import get_data
57
from google_objects.sheets.core import SheetsClient
68
from google_objects.sheets.core import Spreadsheet
@@ -52,3 +54,9 @@ def test_values(self):
5254

5355
for row in values:
5456
self.assertIsInstance(row, list)
57+
58+
def test_frame(self):
59+
spreadsheet = self.client.get_spreadsheet('abc123')
60+
sheets = spreadsheet.sheets()
61+
values = sheets[0].frame()
62+
self.assertIsInstance(values, pandas.DataFrame)

0 commit comments

Comments
 (0)