Usa el sistema de tipos de datos de BigQuery DataFrames
El sistema de tipos de datos de BigQuery DataFrames se basa en los tipos de datos de BigQuery. Este diseño garantiza una integración y alineación perfectas con el Google Cloud almacén de datos, lo que refleja los tipos integrados que se usan para el almacenamiento de datos en BigQuery.
Asignaciones de tipos
En la siguiente tabla, se muestran los equivalentes de tipos de datos en BigQuery, BigQuery DataFrames y otras bibliotecas de Python, así como sus niveles de compatibilidad:
| Tipo de datos | BigQuery | BigQuery DataFrames | Python integrado | PyArrow |
|---|---|---|---|---|
| Booleano | BOOL |
pandas.BooleanDtype() |
bool |
bool_() |
| Número entero | INT64 |
pandas.Int64Dtype() |
int |
int64() |
| Número de punto flotante | FLOAT64 |
pandas.Float64Dtype() |
float |
float64() |
| String | STRING |
pandas.StringDtype(storage="pyarrow") |
str |
string() |
| Bytes | BYTES |
pandas.ArrowDtype(pyarrow.binary()) |
bytes |
binary() |
| Fecha | DATE |
pandas.ArrowDtype(pyarrow.date32()) |
datetime.date |
date32() |
| Hora | TIME |
pandas.ArrowDtype(pyarrow.time64("us")) |
datetime.time |
time64("us") |
| Fecha y hora | DATETIME |
pandas.ArrowDtype(pyarrow.timestamp("us")) |
datetime.datetime |
timestamp("us") |
| Marca de tiempo | TIMESTAMP |
pandas.ArrowDtype(pyarrow.timestamp("us", tz="UTC")) |
Datetime.datetime con zona horaria |
timestamp("us", tz="UTC") |
| Numérico | NUMERIC |
pandas.ArrowDtype(pyarrow.decimal128(38, 9)) |
decimal.Decimal |
decimal128(38, 9) |
| Número grande | BIGNUMERIC |
pandas.ArrowDtype(pyarrow.decimal256(76, 38)) |
decimal.Decimal |
decimal256(76, 38) |
| List<T> | ARRAY<T> |
pandas.ArrowDtype(pyarrow.list_(T)) |
list[T] |
list_(T) |
| Struct | STRUCT |
pandas.ArrowDtype(pyarrow.struct()) |
dict |
struct() |
| JSON | JSON |
pandas.ArrowDtype(pyarrow.json_(pa.string()) en pandas versión 3.0 o posterior y PyArrow versión 19.0 o posterior; de lo contrario, las columnas JSON se exponen como pandas.ArrowDtype(db_dtypes.JSONArrowType()). Esta función está en vista previa. |
No compatible | json_() (vista previa) |
| Datos geográficos | GEOGRAPHY |
Geopandas.array.GeometryDtype()Solo es compatible con to_pandas(). |
No compatible | No compatible |
| Timedelta | No compatible | pandas.ArrowDtype(pyarrow.duration("us")) |
datetime.timedelta |
duration("us") |
Tipos de conversiones
Cuando se usa con datos locales, BigQuery DataFrames convierte los tipos de datos a sus equivalentes correspondientes de BigQuery DataFrames siempre que se defina una asignación de tipos, como se muestra en el siguiente ejemplo:
PyArrow dicta el comportamiento cuando hay discrepancias entre los equivalentes de tipos de datos. En casos excepcionales en los que el tipo integrado de Python funciona de manera diferente a su contraparte de PyArrow, BigQuery DataFrames generalmente favorece el comportamiento de PyArrow para garantizar la coherencia.
En el siguiente muestra de código, se usa la operación datetime.date + timedelta para mostrar que, a diferencia de la biblioteca datetime de Python que aún muestra una instancia de fecha, BigQuery DataFrames sigue el comportamiento de PyArrow y muestra una instancia de marca de tiempo:
Tipos especiales
En las siguientes secciones, se describen los tipos de datos especiales que usa BigQuery DataFrames.
JSON
Dentro de BigQuery DataFrames, las columnas que usan el formato
JSON
de BigQuery (un estándar ligero) se representan con pandas.ArrowDtype. El tipo de flecha subyacente exacto depende de las versiones de tu biblioteca. Los entornos más antiguos suelen usar db_dtypes.JSONArrowType() para la compatibilidad, que es un tipo de extensión de flecha que actúa como un wrapper ligero alrededor de pa.string(). Por el contrario, las configuraciones más recientes (pandas 3.0 y versiones posteriores, y PyArrow 19.0 y versiones posteriores) usan la representación más reciente pa.json_(pa.string()).
timedelta
El tipo timedelta no tiene un equivalente directo dentro del sistema de tipos integrados de BigQuery. Para administrar datos de duración, BigQuery DataFrames utiliza el tipo INT64 como el formato de almacenamiento subyacente en las tablas de BigQuery. Puedes esperar que los resultados de tus cálculos sean coherentes con el comportamiento que esperarías de las operaciones equivalentes realizadas con la biblioteca de pandas.
Puedes cargar directamente los valores timedelta en BigQuery DataFrames y los objetos Series, como se muestra en el siguiente ejemplo:
A diferencia de pandas, BigQuery DataFrames solo admite valores timedelta con precisión de microsegundos. Si tus datos incluyen nanosegundos, debes redondearlos para evitar posibles excepciones, como se muestra en el siguiente ejemplo:
Puedes usar la función bigframes.pandas.to_timedelta para convertir un
objeto Series de BigQuery DataFrames al tipo timedelta, como se muestra
en el siguiente ejemplo:
Cuando cargas datos que contienen valores timedelta en una tabla de BigQuery, los valores se convierten en microsegundos y se almacenan en columnas INT64. Para conservar la información del tipo, BigQuery DataFrames agrega la cadena #microseconds a las descripciones de estas columnas. Algunas operaciones, como las ejecuciones de consulta en SQL y las invocaciones de UDF, no conservan las descripciones de las columnas, y la información del tipo timedelta se pierde después de que se completan estas operaciones.
Herramientas para tipos compuestos
Para ciertos tipos compuestos, BigQuery DataFrames proporciona herramientas que te permiten acceder a los valores elementales dentro de esos tipos y procesarlos.
Accesor de lista
El objeto ListAccessor puede ayudarte a realizar operaciones en cada elemento de la lista mediante la propiedad de lista del objeto Series, como se muestra en el siguiente ejemplo:
Accesor de estructura
El objeto StructAccessor puede acceder a los campos de una serie de estructuras y procesarlos. El objeto de acceso a la API es series.struct, como se muestra en el siguiente ejemplo:
Si el campo struct al que planeas acceder no es ambiguo con respecto a otras propiedades Series, puedes omitir la llamada a struct, como se muestra en el siguiente ejemplo:
Sin embargo, es una práctica recomendada usar struct para acceder a los campos, ya que facilita la comprensión del código y lo hace menos propenso a errores.
Accesor de cadena
Puedes acceder al objeto StringAccessor con la propiedad str en un objeto Series, como se muestra en el siguiente ejemplo:
Accesor de datos geográficos
BigQuery DataFrames proporciona un objeto GeographyAccessor que comparte APIs similares con la estructura GeoSeries que proporciona la biblioteca GeoPandas. Puedes invocar el objeto GeographyAccessor con la propiedad geo en un objeto Series, como se muestra en el siguiente ejemplo:
¿Qué sigue?
- Obtén información sobre BigQuery DataFrames.
- Obtén información sobre las sesiones y la E/S de BigQuery DataFrames.
- Aprende a visualizar gráficos con BigQuery DataFrames.
- Explora la referencia de la API de BigQuery DataFrames.