Решение:
Я столкнулся с той же проблемой, и думаю, что это не просто ошибка в модуле pygsheets, а ограничение, как вы ясно указали.
Что я сделал, чтобы решить эту проблему:
def encodeDataFrame(df, encoding='UTF-8'):
if df is not None and not df.empty:
for column, series in df.items():
if type(series.at[0]) == unicode:
try:
encodedSeries = series.str.encode(encoding)
df[column] = encodedSeries
except Exception as e:
print 'Could not encode column %s' % column
raise
И вы можете вызвать функцию следующим образом:
encodeDataFrame(df)
wks.set_dataframe(df, start='A10')
Пояснение:
Вы решаете проблему, кодируя значения unicode
самостоятельно, прежде чем отправлять их в функцию set_dataframe
.
Эта проблема возникает, когда вы пытаетесь использовать функцию Worksheet.set_dataframe
, используя фрейм данных, содержащий символы Юникода, которые не могут быть закодированы в ascii (например, ударения и многие другие).
Исключение выдается, потому что функция set_dataframe
пытается преобразовать значения unicode
в значения str
(используя кодировку по умолчанию). Для Python 2 кодировкой по умолчанию является ascii
, а при обнаружении символа вне диапазона ascii
выдается исключение.
Некоторые люди предлагают перезагрузить модуль sys , чтобы обойти эту проблему, но здесь объясняется, почему вы не должны это делать
Другое решение, о котором я бы подумал, - это использовать модуль pygsheets в Python 3, где это больше не должно быть проблемой, поскольку кодировка по умолчанию для Python 3 - UTF-8 ( см. Документы )
Бонус:
Задайте себе вопрос:
1) Unicode - это кодировка?
2) Что такое кодировка?
Если вы сомневались в любом из этих вопросов, вам следует прочитать эту статью , которая дала мне знания, необходимые для обдумывания этого решения. Затраченное время того стоило.
Для получения дополнительной информации вы можете попробовать эту статью , которая в конце ссылается на предыдущую.