Обработка значений NaN при вставке фреймов данных Pandas в таблицы BigQuery - PullRequest
0 голосов
/ 23 октября 2018

Я использую следующий код для вставки кадра данных Pandas с несколькими значениями NaN в таблицу BigQuery.Фрейм данных подготовлен в облаке Datalab.

import google.datalab.bigquery as bq

bqtable = ('project_name', 'dataset_name', 'table_name')
table = bq.Table(bqtable)

table_schema = bq.Schema.from_data(df)
table.create(schema = table_schema, overwrite = True)

table.insert(df)

Я получаю следующую ошибку из-за значений NaN в фрейме данных:

RequestException: HTTP request failed: Invalid JSON payload received. 
Unexpected token. : "user_id": NaN,
                               ^

Я знаю, что JSONне понимает NaN, но я не могу просто использовать fillna для преобразования этих NaN значений во что-то еще, так как мне нужно, чтобы эти поля были вставлены как null в таблицу BigQuery.У кого-нибудь есть обходной путь для этого?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Если вы имели в виду столбец NULL, например:

enter image description here

Можете ли вы попробовать изменить тип столбца на FLOAT, если это возможно?

enter image description here

Хотя это и добавляет хвост .0 к вашему user_id, но это не должно влиять на запросы, если ваш user_id не задан как строковый тип.

0 голосов
/ 23 октября 2018

Замените все значения np.nan на значение None в Python, затем повторите код (или попробуйте df.to_gbq):

df = df.where(pd.notnull(df), None)

Я не знаком с Google BigQuery и вижуничего плохого в вашем существующем коде, но, возможно, стоит установить пакет pandas-gbq.Затем попробуйте записать DataFrame в GBQ с df.to_gbq, как подробно описано в документации здесь: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_gbq.html

...