From 03b201bd8a7804b9c6f6054dc749f9278821465c Mon Sep 17 00:00:00 2001 From: Javier Domingo Cansino Date: Thu, 22 Jun 2017 18:09:47 +0100 Subject: [PATCH 1/3] ENH: Supporting REPEATED schema for list types --- pandas_gbq/gbq.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pandas_gbq/gbq.py b/pandas_gbq/gbq.py index b9bb9498..487174f4 100644 --- a/pandas_gbq/gbq.py +++ b/pandas_gbq/gbq.py @@ -1079,8 +1079,11 @@ def _generate_bq_schema(df, default_type='STRING'): fields = [] for column_name, dtype in df.dtypes.iteritems(): - fields.append({'name': column_name, - 'type': type_mapping.get(dtype.kind, default_type)}) + definition = {'name': column_name, + 'type': type_mapping.get(dtype.kind, default_type)} + if isinstance(getattr(df, column_name)[0], list): + definition['mode'] = 'REPEATED' + fields.append(definition) return {'fields': fields} From 79f46fe0b527e3073480bc1a5f76ecc814ca97e9 Mon Sep 17 00:00:00 2001 From: Javier Domingo Cansino Date: Fri, 30 Jun 2017 08:57:39 +0100 Subject: [PATCH 2/3] Adding a test to check repeated fields --- pandas_gbq/tests/test_gbq.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pandas_gbq/tests/test_gbq.py b/pandas_gbq/tests/test_gbq.py index e8eda1d3..e67e49f9 100644 --- a/pandas_gbq/tests/test_gbq.py +++ b/pandas_gbq/tests/test_gbq.py @@ -1091,6 +1091,15 @@ def test_generate_schema(self): assert schema == test_schema + def test_generate_repeated_schema(self): + df = DataFrame([{'A': [1, 2, 3], 'B': ['1', '2']}, {'A': [3, 5], 'B': ['8', '3']}]) + schema = gbq._generate_bq_schema(df) + + test_schema = {'fields': [{'name': 'A', 'type': 'INTEGER', 'mode': 'REPEATED'}, + {'name': 'B', 'type': 'STRING', 'mode': 'REPEATED'}]} + + assert schema == test_schema + def test_create_table(self): test_id = "6" schema = gbq._generate_bq_schema(tm.makeMixedDataFrame()) From 30c424865238f88ebeb8e10b2985c1b6e4b26871 Mon Sep 17 00:00:00 2001 From: Javier Domingo Cansino Date: Fri, 30 Jun 2017 09:02:18 +0100 Subject: [PATCH 3/3] Fixing linting --- pandas_gbq/tests/test_gbq.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pandas_gbq/tests/test_gbq.py b/pandas_gbq/tests/test_gbq.py index e67e49f9..8cade975 100644 --- a/pandas_gbq/tests/test_gbq.py +++ b/pandas_gbq/tests/test_gbq.py @@ -1092,11 +1092,14 @@ def test_generate_schema(self): assert schema == test_schema def test_generate_repeated_schema(self): - df = DataFrame([{'A': [1, 2, 3], 'B': ['1', '2']}, {'A': [3, 5], 'B': ['8', '3']}]) + df = DataFrame([{'A': [1, 2, 3], 'B': ['1', '2']}, + {'A': [3, 5], 'B': ['8', '3']}]) schema = gbq._generate_bq_schema(df) - test_schema = {'fields': [{'name': 'A', 'type': 'INTEGER', 'mode': 'REPEATED'}, - {'name': 'B', 'type': 'STRING', 'mode': 'REPEATED'}]} + test_schema = {'fields': [ + {'name': 'A', 'type': 'INTEGER', 'mode': 'REPEATED'}, + {'name': 'B', 'type': 'STRING', 'mode': 'REPEATED'} + ]} assert schema == test_schema