2015-09-05 8 views
6

Voglio passare i dati del dataframe ai miei appunti in modo da poter incollare in Excel. Il problema è che il personaggio '\xe9' sta causando un problema di codifica, in questo modo:Python Pandas to_clipboard() UnicodeEncodeError: codec 'ascii' non può codificare il carattere

>>> 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) 

ho decodificato il carattere ed è un accento é

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

Dopo aver letto la documentazione per to_clipboard(), ho notato che dice: altre parole chiave vengono passate a to_csv. OK, così da "altre parole chiave", presumo che significhi argomenti di parole chiave da to_csv() - in particolare voglio usare encoding='cp1252'.

Quando provo questo, to_clipboard() non riconosce la parola chiave 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' 

C'è un modo per passare tutti i dati nella clipboard (sia ASCII e non-ASCII)?

+0

Ho riprodotto il problema ma non sono riuscito a risolverlo e ha incasinato i miei appunti quindi non è stato in grado di tagliare e incollare qualsiasi app senza chiudere IPython. Forse potresti semplicemente scrivere il df in un file, cvs o excel. –

+0

Hanno esattamente lo stesso problema (con 'encode = 'utf-8'') s piacerebbe sapere se c'è una soluzione a questo problema! (stranamente questo non accade sempre ma solo in alcuni casi) – Yona

risposta

0
df.to_clipboard(df.to_csv(encoding='cp1252')) 

basta codificarlo come un csv con la codifica specificata quindi gettarlo negli appunti.

Problemi correlati