Daten mit BigQuery DataFrames bearbeiten

In diesem Dokument werden die Funktionen zur Datenbearbeitung beschrieben, die mit BigQuery DataFrames verfügbar sind. Die in der bigframes.bigquery-Bibliothek beschriebenen Funktionen finden Sie hier.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Aufgaben in diesem Dokument benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Wenn Sie die Endnutzerauthentifizierung in einer interaktiven Umgebung wie einem Notebook, der Python-REPL oder der Befehlszeile ausführen, fordert BigQuery DataFrames bei Bedarf zur Authentifizierung auf. Andernfalls lesen Sie in diesem Artikel zum Einrichten von Standardanmeldedaten für Anwendungen für verschiedene Umgebungen.

pandas API

Ein wichtiges Merkmal von BigQuery DataFrames ist, dass die bigframes.pandas API so konzipiert ist, dass sie APIs in der pandas-Bibliothek ähnelt. Dieses Design ermöglicht es Ihnen, vertraute Syntaxmuster für Datenbearbeitungsaufgaben zu verwenden. Vorgänge, die über die BigQuery DataFrames API definiert werden, werden serverseitig ausgeführt. Dabei wird direkt auf Daten zugegriffen, die in BigQuery gespeichert sind. Datasets müssen nicht aus BigQuery übertragen werden.

Informationen dazu, welche pandas-APIs von BigQuery DataFrames unterstützt werden, finden Sie unter Unterstützte pandas-APIs.

Daten prüfen und bearbeiten

Mit der bigframes.pandas API können Sie Datenprüfungs- und Berechnungsvorgänge ausführen. Im folgenden Codebeispiel wird die bigframes.pandas-Bibliothek verwendet, um die Spalte body_mass_g zu prüfen, den Mittelwert body_mass zu berechnen und den Mittelwert body_mass nach species zu berechnen:

import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Inspect one of the columns (or series) of the DataFrame:
bq_df["body_mass_g"]

# Compute the mean of this series:
average_body_mass = bq_df["body_mass_g"].mean()
print(f"average_body_mass: {average_body_mass}")

# Find the heaviest species using the groupby operation to calculate the
# mean body_mass_g:
(
    bq_df["body_mass_g"]
    .groupby(by=bq_df["species"])
    .mean()
    .sort_values(ascending=False)
    .head(10)
)

BigQuery-Bibliothek

Die BigQuery-Bibliothek bietet BigQuery-SQL-Funktionen, für die es möglicherweise kein pandas-Äquivalent gibt. In den folgenden Abschnitten finden Sie einige Beispiele.

Arraywerte verarbeiten

Mit der Funktion bigframes.bigquery.array_agg() in der Bibliothek bigframes.bigquery können Sie Werte nach einem groupby-Vorgang aggregieren:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

s = bpd.Series([0, 1, 2, 3, 4, 5])

# Group values by whether they are divisble by 2 and aggregate them into arrays
bbq.array_agg(s.groupby(s % 2 == 0))
# False    [1 3 5]
# True     [0 2 4]
# dtype: list<item: int64>[pyarrow]

Sie können auch die Arrayfunktionen array_length() und array_to_string() verwenden.

Erstellen Sie ein struct-Objekt Series.

Mit der Funktion bigframes.bigquery.struct() in der Bibliothek bigframes.bigquery können Sie ein neues Series-Objekt mit Unterfeldern für jede Spalte in einem DataFrame erstellen:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Create a new STRUCT Series with subfields for each column in a DataFrames.
lengths = bbq.struct(
    bq_df[["culmen_length_mm", "culmen_depth_mm", "flipper_length_mm"]]
)

lengths.peek()
# 146	{'culmen_length_mm': 51.1, 'culmen_depth_mm': ...
# 278	{'culmen_length_mm': 48.2, 'culmen_depth_mm': ...
# 337	{'culmen_length_mm': 36.4, 'culmen_depth_mm': ...
# 154	{'culmen_length_mm': 46.5, 'culmen_depth_mm': ...
# 185	{'culmen_length_mm': 50.1, 'culmen_depth_mm': ...
# dtype: struct[pyarrow]

Zeitstempel in Unix-Epochen umwandeln

Mit der Funktion bigframes.bigquery.unix_micros() in der Bibliothek bigframes.bigquery können Sie Zeitstempel in Unix-Mikrosekunden umwandeln:

import pandas as pd

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Create a series that consists of three timestamps: [1970-01-01, 1970-01-02, 1970-01-03]
s = bpd.Series(pd.date_range("1970-01-01", periods=3, freq="d", tz="UTC"))

bbq.unix_micros(s)
# 0               0
# 1     86400000000
# 2    172800000000
# dtype: Int64

Sie können auch die Zeitfunktionen unix_seconds() und unix_millis() verwenden.

SQL-Skalarfunktion verwenden

Mit der Funktion bigframes.bigquery.sql_scalar() in der bigframes.bigquery-Bibliothek können Sie auf beliebige SQL-Syntax zugreifen, die einen einspaltigen Ausdruck darstellt:

import bigframes.bigquery as bbq
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"

# The sql_scalar function can be used to inject SQL syntax that is not supported
# or difficult to express with the bigframes.pandas APIs.
bq_df = bpd.read_gbq(query_or_table)
shortest = bbq.sql_scalar(
    "LEAST({0}, {1}, {2})",
    columns=[
        bq_df["culmen_depth_mm"],
        bq_df["culmen_length_mm"],
        bq_df["flipper_length_mm"],
    ],
)

shortest.peek()
#         0
# 149	18.9
# 33	16.3
# 296	17.2
# 287	17.0
# 307	15.0
# dtype: Float64

Nächste Schritte