为什么to_csv给出错误?
问题描述:
这是我的代码:为什么to_csv给出错误?
with open('myData', 'a') as f:
if count1 == 1:
df.to_csv(f,index=False, quoting=3)
else:
df.to_csv(f,index=False, quoting=3 , header = False)
Error: need to escape, but no escapechar set
我怎样才能解决这个问题呢?我想我需要改变报价为None,引号字符为““”我在正确的方向前进
这是完整的回溯:?
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-22-7b964e5d0ae8> in <module>()
27 action.perform()
28 html = browser.page_source
---> 29 ScrapePage(html)
<ipython-input-20-1d50d699fe76> in ScrapePage(html)
56 with open('myData', 'a') as f:
57 if count1 == 1:
---> 58 df.to_csv(f,index=False, quoting=3)
59 else:
60 df.to_csv(f,index=False, quoting=3 , header = False)
C:\Anaconda2\lib\site-packages\pandas\core\frame.pyc in to_csv(self, path_or_buf, sep,
na_rep, float_format, columns, header, index, index_label, mode, encoding, compression,
quoting, quotechar, line_terminator, chunksize, tupleize_cols, date_format, doublequote,
escapechar, decimal, **kwds)
1330 escapechar=escapechar,
1331 decimal=decimal)
-> 1332 formatter.save()
1333
1334 if path_or_buf is None:
C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in save(self)
1504
1505 else:
-> 1506 self._save()
1507
1508 finally:
C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in _save(self)
1604 break
1605
-> 1606 self._save_chunk(start_i, end_i)
1607
1608 def _save_chunk(self, start_i, end_i):
C:\Anaconda2\lib\site-packages\pandas\core\format.pyc in _save_chunk(self, start_i, end_i)
1631 quoting=self.quoting)
1632
-> 1633 lib.write_csv_rows(self.data, ix, self.nlevels, self.cols, self.writer)
1634
1635 # from collections import namedtuple
pandas\lib.pyx in pandas.lib.write_csv_rows (pandas\lib.c:19840)()
Error: need to escape, but no escapechar set
原因在if: else:
写入CSV是因为我必须写多个数据帧到同一个文件,我用count来检查它是否第一次写入
答
选项quoting=3
相当于quoting=csv.QUOTE_NONE
它是一个永远不会引用字段的指令。任何字段都包含分隔符(逗号),然后逗号将不得不逃脱。但是,没有设置escapechar,这会产生错误。 Documentation for csv quote constants
例如,您可以设置一个escapechar df.to_csv(f,index=False, quoting=3, escapechar=r'\')
以使用反斜杠来转义出现的任何逗号,或者可以使用不同的引号值。 quoting=csv.QUOTE_MINIMAL
(或quoting=0
)将仅使用需要它们的字段的引号。
举一个具体的例子,假设你有两行两列的数据帧:
2015 "eggs and spam"
2016 "eggs, bacon and spam"
与quoting=0
csv文件你(引号绕场使用含有逗号)
2015,eggs and spam
2016,"eggs, bacon and spam"
随着quoting=3, escapechar=r"\"
你:(用于转义逗号 “\”)
2015,eggs and spam
2016,eggs\, bacon and spam
但quoting=3
并没有escapechar你会得到一个错误。
最好的解决办法是使用quoting=0
请提供完整的回溯。 – albert
你在使用熊猫吗?你能否展示完整的追踪 - 最好挑选一个短语 –