将数据帧写入 csv 文件时解决错误“分隔符必须是 1 个字符的字符串”

Jul*_*lia 6 delimiter pandas

使用这个问题: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') ,但得到了相同的错误。

Moh*_*OUI 5

正如问题讨论中提到的(此处),这不被视为 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)


bin*_*ate 3

请注意,虽然此错误的解决方案是使用字符串字符而不是正则表达式,但 pandas 在使用from __future__ import unicode_literals有效的 unicode 字符时也会引发此错误。截至 2015 年 11 月 16 日,版本 0.16.2 为止,此错误仍然是 pandas 中的一个已知错误:
\n “如果未将 sep 作为字符串传递,即使编码设置为 unicode,to_csv 也会阻塞”#6035

\n\n

例如,其中 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\')\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

类型错误:“分隔符”必须是 1 个字符的字符串

\n
\n\n

使用具有指定编码的字节文字-*- coding: utf-8 -*-(Python 3 默认为 utf-8)将在 pandas 0.16.2 中解决此问题:( b\'\\t\') \xe2\x80\x94我尚未使用以前的版本或 0.17.0 进行测试。

\n\n
# -*- 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\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

(请注意,在版本 0.13.0 - ??? 中,有必要使用pandas.compat import u;但到了 0.16.2,就可以使用字节文字了。)

\n