使用set_dataframe
通过pygsheets
和pandas
更新我的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),但我想知道是否有人找到了解决方法。
答案 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并在末尾链接到上一个。