Проблема с форматом данных при импорте pandas DF из python в таблицы Google с использованием df2gsheets - PullRequest
1 голос
/ 05 августа 2020

Я использую df2gspread для импорта определенного pandas df в таблицы Google. Процесс выполняется без проблем, но информация numeri c, которой я хотел бы управлять в Gsheets, импортируется как текст. Когда я использую базовые c математические операции с данными, хранящимися в виде текста, это работает, но когда я пытаюсь использовать функции Таблицы, такие как сумма, среднее и многое другое, возвращаемое значение всегда равно нулю. Кроме того, если я попытаюсь вручную преобразовать текст в числа в самом gsheet, это не даст никакого эффекта.

Код выглядит следующим образом:

import pandas as pd
import gspread as gs
from df2gspread import df2gspread as d2g

result = tera.execute_response("select * from table_drive")
df = pd.DataFrame(result)

scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    'json_gsheets.json', scope)
gc = gs.authorize(credentials)

spreadsheet_key = 'insert_wks_key_here'
wks = 'import'
d2g.upload(df, spreadsheet_key, wks, credentials=credentials, row_names=False,start_cell = 'B3')

Это вставляет данные правильно, но все там безвозвратно в виде текста.

Кто-нибудь может помочь?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 августа 2020

Как насчет этого ответа?

Проблема

Когда я увидел сценарий df2gspread , мне показалось, что метод upload использует метод update_cells(). В этом случае в gspread значение по умолчанию для valueInputOption равно RAW. И df2gspread использует значение по умолчанию. Таким образом, введенные числовые значения имеют одинарную кавычку ' в верхнем символе. Я думаю, что причина вашей проблемы в этом.

Здесь, для достижения вашей цели, я хотел бы предложить следующие 2 шаблона.

Шаблон 1:

В этом шаблоне изменен сценарий df2gspread. Измените функцию upload следующим образом. На текущем этапе я думаю, что есть 3 части.

От:

wks.update_cells(cell_list)

Кому:

wks.update_cells(cell_list, value_input_option='USER_ENTERED')

Схема 2:

В этом шаблоне используется метод values_update в gspread.

Пример сценария:

import pandas as pd
import gspread as gs
from df2gspread import df2gspread as d2g

result = tera.execute_response("select * from table_drive")
df = pd.DataFrame(result)

scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('json_gsheets.json', scope)

gc = gs.authorize(credentials)
spreadsheet_key = 'insert_wks_key_here'
wks = 'import'
spreadsheet = gc.open_by_key(spreadsheet_key)
values = [df.columns.values.tolist()]
values.extend(df.values.tolist())
spreadsheet.values_update(wks, params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
  • Вы можете видеть, что USER_ENTERED также используется в этом случае.

Ссылки:

...