как преобразовать столбец панды в большой формат даты таблицы запросов - PullRequest
0 голосов
/ 12 октября 2018

У меня есть фрейм данных panda со столбцом с форматом даты, как показано ниже:

PublishDate = 2018-08-31 Я использовал функцию panda to_gbq () для сброса данных в таблицу больших запросов.Прежде чем создавать дамп данных, я проверяю, чтобы формат столбцов соответствовал схеме таблицы.Дата публикации только в таблице больших запросов.Как можно добиться чего-то похожего на:

     df['PublishDate'] = df['PublishDate'].astype('?????')

Я пробовал datetime64 [D] и

     df['PublishDate'] = pd.to_datetime(df['PublishDate'], format='%Y-%m-%d', errors='coerce').dt.date
     df['PublishDate'] = [time.to_date() for time in df['PublishDate']]

, но это не сработало!

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Мне не удалось найти поддержку для типа даты в pandas-gbq.

Другой вариант - вставить с клиентом bigquery:

from google.cloud import bigquery


def chunks(l, chunk_size):
    for i in range(0, len(l), chunk_size):
        yield l[i:i + chunk_size]


CLIENT_ROW_LIMIT = 10000
SCHEMA = [
    bigquery.SchemaField('...'),
]

def push_with_date(df):
    client = bigquery.Client(project='...')
    dataset = client.dataset('...')
    table_ref = dataset.table('...')
    rows = [row.tolist() for index, row in df.iterrows()]
    for i, chunk in enumerate(chunks(rows, CLIENT_ROW_LIMIT)):
        print('pushing', i)
        errors = client.insert_rows(table_ref, chunk, SCHEMA)
        if errors:
            # Handle
            raise Exception
0 голосов
/ 19 октября 2018

Afaik, pandas-gbq , похоже, не поддерживает тип DATE .Поэтому ваш лучший вариант, вероятно, - экспортировать столбец как TIMESTAMP, а затем преобразовать его в DATE с помощью запроса SQL.

df['PublishTimestamp'] = pd.to_datetime(
    df['PublishDate'],
    format='%Y-%m-%d',
    errors='coerce'
)
df.to_gbq("YOUR-DATASET.YOUR-TABLE", project_id="YOUR-PROJECT")

client = bigquery.Client()

job_config = bigquery.QueryJobConfig()
table_ref = client.dataset("YOUR-DATASET").table("YOUR-TABLE")
job_config.destination = ref_table
job_config.write_disposition = "WRITE_TRUNCATE"

sql = """
    SELECT
      *,
      DATE(PublishTimestamp) as PublishDate
    FROM
      `YOUR-PROJECT.YOUR-DATASET.YOUR-TABLE`
"""

query_job = client.query(
    sql,
    job_config=job_config
)
query_job.result()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...