使用这个问题:Pandas 将数据帧写入 CSV 文件作为模型,我编写了以下代码来制作 csv 文件:
df.to_csv('/Users/Lab/Desktop/filteredwithheading.txt', sep='\s+', header=True)
Run Code Online (Sandbox Code Playgroud)
但它返回以下错误:
TypeError: "delimiter" must be an 1-character string
Run Code Online (Sandbox Code Playgroud)
我在这里查找了相关文档http://pandas.pydata.org/pandas-docs/stable/ generated/pandas.DataFrame.to_csv.html 但我无法弄清楚我缺少什么,或者错误是什么方法。我也尝试在代码中使用 (sep='\s') ,但得到了相同的错误。
正如问题讨论中提到的(此处),这不被视为 pandas 问题,而是python's csv module与 python2.x 的兼容性问题。
解决此问题的解决方法是将分隔符括起来str(..)。例如,以下是如何重现问题并解决它的方法:
from __future__ import unicode_literals
import pandas as pd
df = pd.DataFrame([['a', 'A'], ['b', 'B']])
df.to_csv(sep=',')
Run Code Online (Sandbox Code Playgroud)
这将引发以下错误:
TypeError ....
----> 1 df.to_csv(sep=',')
TypeError: "delimiter" must be an 1-character string
Run Code Online (Sandbox Code Playgroud)
然而,以下将显示预期结果
from __future__ import unicode_literals
import pandas as pd
df = pd.DataFrame([['a', 'A'], ['b', 'B']])
df.to_csv(sep=str(','))
Run Code Online (Sandbox Code Playgroud)
输出:
',0,1\n0,a,A\n1,b,B\n'
Run Code Online (Sandbox Code Playgroud)
对于您的情况,您应该按如下方式编辑代码:
df.to_csv('/Users/Lab/Desktop/filteredwithheading.txt', sep=str('\s+'), header=True)
Run Code Online (Sandbox Code Playgroud)
请注意,虽然此错误的解决方案是使用字符串字符而不是正则表达式,但 pandas 在使用from __future__ import unicode_literals有效的 unicode 字符时也会引发此错误。截至 2015 年 11 月 16 日,版本 0.16.2 为止,此错误仍然是 pandas 中的一个已知错误:
\n “如果未将 sep 作为字符串传递,即使编码设置为 unicode,to_csv 也会阻塞”#6035
例如,其中 df 是 pandas DataFrame:
\n\n# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\nimport pandas as pd\n\ndf.to_csv(pdb_seq_fp, sep=\'\\t\', encoding=\'utf-8\')\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n类型错误:“分隔符”必须是 1 个字符的字符串
\n
使用具有指定编码的字节文字-*- coding: utf-8 -*-(Python 3 默认为 utf-8)将在 pandas 0.16.2 中解决此问题:( b\'\\t\') \xe2\x80\x94我尚未使用以前的版本或 0.17.0 进行测试。
# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\nimport pandas as pd\n\ndf.to_csv(pdb_seq_fp, sep=b\'\\t\', encoding=\'utf-8\')\nRun Code Online (Sandbox Code Playgroud)\n\n(请注意,在版本 0.13.0 - ??? 中,有必要使用pandas.compat import u;但到了 0.16.2,就可以使用字节文字了。)
| 归档时间: |
|
| 查看次数: |
30506 次 |
| 最近记录: |