pandas to_csv: ascii can't encode character
我正在尝试将数据帧读写到管道分隔的文件中。有些字符是非罗马字母(`,??等)。但当我把重音写成ASCII时,它就断了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | df = pd.read_csv('filename.txt',sep='|', encoding='utf-8') <do stuff> newdf.to_csv('output.txt', sep='|', index=False, encoding='ascii') ------- File"<ipython-input-63-ae528ab37b8f>", line 21, in <module> newdf.to_csv(filename,sep='|',index=False, encoding='ascii') File"C:\Users\aliceell\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\frame.py", line 1344, in to_csv formatter.save() File"C:\Users\aliceell\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\formats\format.py", line 1551, in save self._save() File"C:\Users\aliceell\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\formats\format.py", line 1652, in _save self._save_chunk(start_i, end_i) File"C:\Users\aliceell\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\formats\format.py", line 1678, in _save_chunk lib.write_csv_rows(self.data, ix, self.nlevels, self.cols, self.writer) File"pandas\lib.pyx", line 1075, in pandas.lib.write_csv_rows (pandas\lib.c:19767) UnicodeEncodeError: 'ascii' codec can't encode character '\xb4' in position 7: ordinal not in range(128) |
如果我改为使用UTF-8编码,则无法正确读取文件:
1 2 3 4 | newdf.to_csv('output.txt',sep='|',index=False,encoding='utf-8') pd.read_csv('output.txt', sep='|') > UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb4 in position 2: invalid start byte |
我的目标是有一个管道分隔的文件,保留重音符号和特殊字符。
另外,有没有一个简单的方法来找出哪一行的读"csv"正在突破?现在我不知道如何让它向我展示坏性格。
在这里检查答案
这是一个简单得多的解决方案:
1 | newdf.to_csv("C:/tweetDF", sep='\t', encoding = 'utf-8') |
您有一些不是ASCII的字符,因此无法像您尝试的那样进行编码。我只是按照评论中的建议使用
要检查导致问题的行,可以尝试如下操作:
1 2 3 4 | def is_not_ascii(string): return string is not None and any([ord(s) >= 128 for s in string]) df[df[col].apply(is_not_ascii)] |
您需要指定要测试的列