【问题标题】:Python Pandas to_clipboard() UnicodeEncodeError: 'ascii' codec can't encode characterPython Pandas to_clipboard() UnicodeEncodeError: 'ascii' codec can't encoding character
【发布时间】:2015-12-01 06:49:12
【问题描述】:

我想将数据框数据传递到剪贴板,以便粘贴到 Excel 中。问题是,字符 '\xe9' 导致了编码问题,如下所示:

>>> df.to_clipboard()
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\pandas\util\clipboard.py", line 65, in winSetClipboard
    hCd = ctypes.windll.kernel32.GlobalAlloc(GMEM_DDESHARE, len(bytes(text))+1)
TypeError: string argument without an encoding

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    df.to_clipboard()
  File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1028, in to_clipboard
    clipboard.to_clipboard(self, excel=excel, sep=sep, **kwargs)
  File "C:\Python34\lib\site-packages\pandas\io\clipboard.py", line 98, in to_clipboard
    clipboard_set(objstr)
  File "C:\Python34\lib\site-packages\pandas\util\clipboard.py", line 68, in winSetClipboard
    hCd = ctypes.windll.kernel32.GlobalAlloc(GMEM_DDESHARE, len(bytes(text, 'ascii'))+1)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 543793: ordinal not in range(128)

我解码了这个字符,它是一个重音é

>>> '\xe9'.encode().decode()
'é'

阅读to_clipboard() 的文档后,我注意到它说: 其他关键字传递给to_csv。好的,所以“其他关键字”是指来自to_csv() 的关键字参数——特别是我想使用encoding='cp1252'

当我尝试这个时,to_clipboard() 无法识别 encoding 关键字:

df.to_clipboard(encoding='cp1252')
  File "C:\Python34\lib\site-packages\pandas\core\generic.py", line 1028, in to_clipboard
    clipboard.to_clipboard(self, excel=excel, sep=sep, **kwargs)
  File "C:\Python34\lib\site-packages\pandas\io\clipboard.py", line 95, in to_clipboard
    objstr = obj.to_string(**kwargs)
TypeError: to_string() got an unexpected keyword argument 'encoding'

有没有办法将所有数据传递到剪贴板(包括 ascii 和非 ascii)?

【问题讨论】:

  • 我重现了这个问题,但无法修复它,它弄乱了我的剪贴板,因此无法在不关闭 IPython 的情况下剪切和粘贴任何应用程序。也许您可以将 df 写入文件、cvs 或 excel。
  • 有完全相同的问题(encode='utf-8')很想知道这个问题是否有解决方案! (奇怪的是,这并不总是发生,而只是在某些情况下)

标签: python python-3.x pandas unicode clipboard


【解决方案1】:
df.to_clipboard(df.to_csv(encoding='cp1252'))

只需使用指定的编码将其编码为 csv,然后将其扔到剪贴板上。

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 2015-12-03
    • 2018-08-14
    • 2014-05-09
    • 1970-01-01
    • 2019-07-18
    • 2022-01-20
    • 2017-05-10
    相关资源
    最近更新 更多