使用set_dataframe时pygsheets UnicodeEncodeError

时间:2019-04-20 18:11:21

标签: pandas google-sheets pygsheets

使用set_dataframe通过pygsheetspandas更新我的Google表格时,出现错误:

  

UnicodeEncodeError:'ascii'编解码器无法在位置13编码字符u'\ xf1':序数不在范围内(128)

这是由于某些文本上有utf-8标记,例如:“señor”

这是在执行时发生的:

wks.set_dataframe(df, start='A10')

熊猫to_csv接受类似于encoding="utf-8"的编码参数,我可以建议set_dataframe这样做吗?

wks.set_dataframe(df, start='A10', encoding="utf-8")

我看到10天前这里有一张车票(https://github.com/nithinmurali/pygsheets/issues/327),但我想知道是否有人找到了解决方法。

1 个答案:

答案 0 :(得分:0)

解决方案:

我遇到了同样的问题,我认为,除了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函数来解决此问题。

每当您尝试使用包含无法以ascii编码的unicode字符(例如重音符号和许多其他字符)的数据帧来使用Worksheet.set_dataframe function时,都会出现此问题。

抛出异常是因为set_dataframe函数试图将unicode值转换为str值(使用默认编码)。对于Python 2,默认编码为ascii,并且在发现ascii范围之外的字符时,将引发异常。

有人建议reloading the sys module来规避此问题,但是解释了here的原因,您不应该这样做

我想到的另一种解决方案是在Python 3中使用pygsheets模块,在此不再是问题,因为Python 3的默认编码为UTF-8(see docs

奖金:

问你自己:
1)Unicode是一种编码吗?
2)什么是编码?

如果您对这些问题中的任何一个都感到犹豫,则应阅读this article,它为我提供了考虑此解决方案所需的知识。投入的时间是完全值得的。

有关更多信息,您可以尝试使用this article并在末尾链接到上一个。