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

时间:2014-01-08 19:43:37

标签: pandas delimiter

使用这个问题:Pandas writing dataframe to CSV file作为模型,我编写了以下代码来制作csv文件:

df.to_csv('/Users/Lab/Desktop/filteredwithheading.txt', sep='\s+', header=True)

但它返回以下错误:

TypeError: "delimiter" must be an 1-character string

我在这里查看了这个文档http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html,但我无法弄清楚我错过了什么,或者错误意味着什么。我也尝试在代码中使用(sep ='\ s'),但是得到了同样的错误。

2 个答案:

答案 0 :(得分:2)

请注意,尽管此错误的解决方案是使用字符串字符而不是正则表达式,但在使用带有效Unicode字符的from __future__ import unicode_literals时,pandas也会引发此错误。截至2015-11-16,发布0.16.2,此错误仍是熊猫中已知的错误:
"to_csv chokes if not passed sep as a string, even when encoding is set to unicode" #6035

例如,其中df是pandas DataFrame:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import pandas as pd

df.to_csv(pdb_seq_fp, sep='\t', encoding='utf-8')
  

TypeError:"分隔符"必须是1个字符的字符串

使用具有指定编码的byte lteral(默认utf-8和Python 3)-*- coding: utf-8 -*-将在pandas 0.16.2中解决此问题:(b'\t') - 我没有'用以前的版本或0.17.0进行测试。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import pandas as pd

df.to_csv(pdb_seq_fp, sep=b'\t', encoding='utf-8')

(注意,对于版本0.13.0 - ???,有必要使用pandas.compat import u;但是通过0.16.2,字节文字是可行的方法。)

答案 1 :(得分:0)

如问题讨论(here)中所述,这不被视为熊猫问题,而是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=',')

这将引发以下错误:

TypeError ....              
----> 1 df.to_csv(sep=',')
TypeError: "delimiter" must be an 1-character string

但是,以下内容将显示预期结果

from __future__ import unicode_literals
import pandas as pd 
df = pd.DataFrame([['a', 'A'], ['b', 'B']])
df.to_csv(sep=str(','))

输出:

',0,1\n0,a,A\n1,b,B\n'

在您的情况下,您应按以下步骤编辑代码:

df.to_csv('/Users/Lab/Desktop/filteredwithheading.txt', sep=str('\s+'), header=True)