Pandas, Gspread, таблица схлопывается

Рейтинг: 0Ответов: 2Опубликовано: 20.01.2023

Делаю скрипт для переноса данных из CSV в Google Sheet. Перенос работает, но pandas считывает таблицу без столбцов. Хотя документ выгрузился нормально... (upd,delimiter=';'помог), но сейчас другие ошибки пошли и данные не выгружаются

import json
from google.oauth2.service_account \
import Credentials
import gspread as gs
import requests
import pandas as pd
import numpy as np
import pandas
import csv
import codecs
import gspread
#Авторизация
scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
credentials = Credentials.from_service_account_file('service_account.json', scopes=scope)
gc = gspread.authorize(credentials)
#Прочитать CSV файл
data = pd.read_csv('123.csv',, delimiter=';')
print(data)
#открыть документ 12, лист 1
wks = gc.open("12").sheet1
#записать csv на лист
wks.update([data.columns.values.tolist()] + data.values.tolist())

Такой ответ приходит

Traceback (most recent call last):
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\models.py", line 511, in prepare_body
    body = complexjson.dumps(json, allow_nan=False)
  File "C:\Users\a.oborin\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 234, in dumps
    return cls(
  File "C:\Users\a.oborin\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\a.oborin\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
ValueError: Out of range float values are not JSON compliant

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\a.oborin\PycharmProjects\test gspread\main.py", line 27, in <module>
    wks.update([data.columns.values.tolist()] + data.values.tolist())
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\gspread\utils.py", line 702, in wrapper
    return f(*args, **kwargs)
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\gspread\worksheet.py", line 1041, in update
    response = self.spreadsheet.values_update(
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\gspread\spreadsheet.py", line 226, in values_update
    r = self.client.request("put", url, params=params, json=body)
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\gspread\client.py", line 79, in request
    response = getattr(self.session, method)(
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\sessions.py", line 647, in put
    return self.request("PUT", url, data=data, **kwargs)
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\google\auth\transport\requests.py", line 549, in request
    response = super(AuthorizedSession, self).request(
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\sessions.py", line 573, in request
    prep = self.prepare_request(req)
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\sessions.py", line 484, in prepare_request
    p.prepare(
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\models.py", line 371, in prepare
    self.prepare_body(data, files, json)
  File "C:\Users\a.oborin\PycharmProjects\test gspread\venv\lib\site-packages\requests\models.py", line 513, in prepare_body
    raise InvalidJSONError(ve, request=self)
requests.exceptions.InvalidJSONError: Out of range float values are not JSON compliant

Process finished with exit code 1

Ответы

▲ 0

Не указана библиотека Credentials ("from google.oauth2.credentials import Credentials"), не указана библиотека gspread ("import gspread").

Также не указана библиотека для чтения CSV файлов (типа, "import pandas as pd").

Проверь - файл service_account.json должен быть доступен в той же директории, что и код.

Есть ли документ с именем "12" в вашем Google Drive и доступен ли ваш сервисный аккаунт к нему?

▲ 0

#Прочитать CSV файл

data = pd.read_csv('123.csv', delimiter='$', keep_default_na=False)

Вопрос решил методом добавления параметра keep_default_na=False