NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #828 most downloaded on PyPI
Google BigQuery connector for pandas
Last release 1 months ago
25 Aug 2026
Release timing varies
gaps range from 2 weeks to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
69 releases · first in 2017
pandas-gbq: reject backticks in parse_table_id
pandas-gbq: add arrow decoder for read rows response
One column per quarter.
### Features * drop support for Python 3.9
Allow Protobuf 7.x, require Python 3.9
Update bigframes links to new homepage
add dry run to the read_gbq function
boolean round-trip test and CSV datetime loading errors
Temporarily mark as incompatible with pandas 3.0
### Features * add pandas_gbq.sample
Add partitioning and clustering parameters to the to_gbq function
### Features * Add Python 3.13 support (#930) (76e6d11) ### Dependencies * Remove support for Python 3.8 (#932) (ba35a9c) ### Miscellaneous Chores * R
Remove pandas-gbq client ID for authentication
Instrument vscode, jupyter and 3p plugin usage
Remove setup.cfg configuration for creating universal wheels
Add bigquery_client as a parameter for read_gbq and to_gbq
to_gbq can write non-string values to existing STRING columns in BigQuery
Ensure BIGNUMERIC type is used if scale > 9 in Decimal values
to_gbq fails with TypeError if passing in a bigframes DataFrame object
to_gbq uploads ArrowDtype(pa.timestamp(...) without timezone as DATETIME type
to_gbq loads naive (no timezone) columns to BigQuery DATETIME instead of TIMESTAMP
to_gbq loads naive (no timezone) columns to BigQuery DATETIME instead of TIMESTAMP (#814)to_gbq loads object column containing bool values to BOOLEAN instead of STRING (#814)to_gbq loads object column containing dictionary values to STRUCT instead of STRING (#814)to_gbq loads unit8 columns to BigQuery INT64 instead of STRING (#814)to_gbq loads unit8 columns to BigQuery INT64 instead of STRING (#814) (107bb40)to_gbq loads naive (no timezone) columns to BigQuery DATETIME instead of TIMESTAMP (#814) (107bb40)to_gbq loads object column containing bool values to BOOLEAN instead of STRING (#814) (107bb40)to_gbq loads object column containing dictionary values to STRUCT instead of STRING (#814) (107bb40)Handle None when converting numerics to parquet
read_gbq suggests using BigQuery DataFrames with large results
Move bqstorage to extras and add debug capability
Use faster query_and_wait method from google-cloud-bigquery when available
Add 'columns' as an alias for 'col_order'
Add exception context to GenericGBQExceptions
Updates the user instructions re OAuth
Adds ability to provide redirect uri
Remove upper bound for python and pyarrow
Map "if_exists" value to LoadJobConfig.WriteDisposition
Updates requirements.txt to fix failing tests due to missing req
### Bug Fixes * deps: allow pyarrow < 10
allow to_gbq to run without bigquery.tables.create permission.
fix changelog header to consistent size
### Bug Fixes * deps: allow pyarrow v8
avoid deprecated "out-of-band" authentication flow
deps: require google-api-core>=1.31.5, >=2.3.2
### Dependencies * allow pyarrow 7.0
document additional breaking change in 0.17.0
avoid iteritems deprecation in pandas prerelease
read_gbq is renamed from query to query_or_table (#443) (bf0e863)read_gbq supports extreme DATETIME values such as 0001-01-01 00:00:00 (#444) (d120f8f)to_gbq allows strings for DATE and floats for NUMERIC with api_method="load_parquet" (#423) (2180836)datetime.date(1, 1, 1) in load_gbq (#442) (e13abaf)to_gbq (#455) (891a00c)to_gbq uses Parquet by default, use api_method="load_csv" for old behavior
Avoid client.dataset deprecation warnings.
to_gbq to a table in a project different from
the API client project. Specify the target table ID as
project.dataset.table to use this feature.
(#321,
#347)to_gbq.
(#321)to_gbq when table has policyTags.
(#354)client.dataset deprecation warnings.
(#312)Use object dtype for TIME columns.
Add dtypes argument to read_gbq. Use this argument to override the default dtype for a particular column in the query results. For example, this can b
dtypes argument to read_gbq. Use this argument to override
the default dtype for a particular column in the query results.
For example, this can be used to select nullable integer columns as
the Int64 nullable integer pandas extension type.
(#242,
#332)df = gbq.read_gbq(
"SELECT CAST(NULL AS INT64) AS null_integer",
dtypes={"null_integer": "Int64"},
)
google-cloud-bigquery-storage 2.0 and higher.
(#329)pandas to 0.20.1.
(#331)update API sources and regenerate
Fix Provided Schema does not match Table error when the existing table contains required fields.
Provided Schema does not match Table error when the existing
table contains required fields.
(#315)Fix AttributeError with BQ Storage API to download empty results.
AttributeError with BQ Storage API to download empty results.
(#299)Raise NotImplementedError when the deprecated private_key argument is used.
NotImplementedError when the deprecated private_key
argument is used.
(#301)Add max_results argument to ~pandas_gbq.read_gbq(). Use this argument to limit the number of rows in the results DataFrame. Set max_results to 0 to ig
max_results argument to ~pandas_gbq.read_gbq(). Use this
argument to limit the number of rows in the results DataFrame. Set
max_results to 0 to ignore query outputs, such as for DML or DDL
queries.
(#102)progress_bar_type argument to ~pandas_gbq.read_gbq(). Use
this argument to display a progress bar when downloading data.
(#182)use_bqstorage_api by closing BigQuery
Storage API client after use.
(#294)google-cloud-bigquery to 1.11.1.
(#296)Breaking Change: Python 2 support has been dropped. This is to align with the pandas package which dropped Python 2 support at the end of 2019.
table_schema argument is not modified inplace.
(#278)STRING, ARRAY, and STRUCT columns when
there are zero rows.
(#285)Breaking Change: Default SQL dialect is now standard. Use pandas_gbq.context.dialect to override the default value. (#195, #245)
standard. Use
pandas_gbq.context.dialect to override the default value.
(#195,
#245)BigQuery data type to pandas dtype conversion <reading-dtypes> for read_gbq.
(#269)google-cloud-bigquery to 1.9.0.
(#247)pandas to 0.19.0.
(#262)reauth=True in order to update your credentials to the most recent
version. This is required to use new functionality such as the
BigQuery Storage API.
(#267)to_dataframe() from google-cloud-bigquery in the
read_gbq() function.
(#247)table_schema in to_gbq to contain only a subset of
columns, with the rest being populated using the DataFrame dtypes
(#218)
(contributed by @johnpaton)project_id in to_gbq from provided credentials if
available (contributed by @daureg)read_gbq uses the timezone-aware
DatetimeTZDtype(unit='ns', tz='UTC') dtype for BigQuery
TIMESTAMP columns.
(#269)use_bqstorage_api to read_gbq. The BigQuery Storage API can
be used to download large query results (>125 MB) more quickly. If
the BQ Storage API can't be used, the BigQuery API is used instead.
(#133,
#270)Warn when deprecated private_key parameter is used
Deprecate private_key parameter to pandas_gbq.read_gbq and pandas_gbq.to_gbq in favor of new credentials argument. Instead, create a credentials objec…
private_key parameter to pandas_gbq.read_gbq and
pandas_gbq.to_gbq in favor of new credentials argument. Instead,
create a credentials object using
google.oauth2.service_account.Credentials.from_service_account_info
or
google.oauth2.service_account.Credentials.from_service_account_file.
See the authentication how-to guide <howto/authentication> for
examples.
(#161,
#231)to_gbq.
(#180)pandas_gbq.context.dialect to allow overriding the default SQL
syntax dialect.
(#195,
#235)int columns which contain NULL are now cast to float , rather than object type.
pandas_gbq.Context to cache credentials in-memory, across
calls to read_gbq and to_gbq.
(#198,
#208)DEBUG level.
(#204)
With BigQuery's release of
clustering
querying smaller samples of data is now faster and cheaper.True.
(#212)
This fixes a bug where pandas-gbq could not refresh credentials if
the cached credentials were invalid, revoked, or expired, even when
reauth=True.0.6.1 (2026-10-01) Features declare Python3.15 support
read_gbq performance and memory consumption by delegating
DataFrame construction to the Pandas library, radically reducing
the number of loops that execute in python
(#128)read_gbq, particularly for short
queries.
(#201)SELECT 1 query when running to_gbq.
(#202)Warn when dialect is not passed in to read_gbq. The default dialect will be changing from 'legacy' to 'standard' in a future version.
Project ID parameter is optional in read_gbq and to_gbq when it can inferred from the environment. Note: you must still pass in a project ID when usin
read_gbq and to_gbq when it
can inferred from the environment. Note: you must still pass in a
project ID when using user-based authentication.
(#103)to_gbq, through an optional library <span
class="title-ref">tqdm</span> as dependency.
(#162)read_gbq and to_gbq so that pandas-gbq
can work with datasets in the Tokyo region.
(#177)authentication how-to guide <howto/authentication>.
(#183)contributing guide with new paths to tests.
(#154,
#164)Only show verbose deprecation warning if Pandas version does not populate it.
verbose deprecation warning if Pandas version does not
populate it.
(#157)Fix bug in read_gbq with configuration argument. Updates read_gbq to account for breaking change in the way google-cloud-python version 0.32.0+ handle…
google-cloud-python version 0.32.0+ handles query
configuration API representation.
(#152)verbose parameter in <span
class="title-ref">read_gbq</span> and <span
class="title-ref">to_gbq</span>. Messages use the logging module
instead of printing progress directly to standard output.
(#12)Your coding agent can read these notes before it upgrades. Set up the MCP server →