难度大熊猫csv输出

时间:2015-10-15 12:34:16

标签: pandas transpose quoting

我编写了以下代码来转置包含数字和字母的数据文件:

import pandas as pd
from pandas import DataFrame
    def step2(file1,file2):
    source=pd.read_csv(file1,header=None,engine='python')
    dest=source.transpose()
    dest.to_csv(file2,sep="\t",header=None, index=None,quoting=3)

现在它总是在输出文件中产生双引号,我读了pandas文档并使用了doublequotes=None这样的偶数选项,但仍然会产生引号。该文档还提到,为了设置quoting=None,代码应该包含一些转义字符。我尝试将\n设置为转义字符然后它确实转义引号但在每个元素后添加分隔字符。
如何从pandas csv输出中删除doblequote? 以下是输入

AU AA GG CC 00 AA TT 

以下是设置doublequotes=False并从上面的代码中删除quoting=3选项后的输出

AU
AA
GG
CC
0
AA
TT

我无法解释代码的行为,它将00更改为0.我正在寻求指导,关于此输出的另一个有趣的事情是:当我使用以下文件格式时:

AU AA GG CC 00 AA
AK AA GG CC AA 00

上述代码似乎正如预期的那样正常工作:

AU AK
AA AA
GG GG
CC CC
00 AA
AA 00

任何人都可以指导我为什么在使用单行时获得不同的输出?

1 个答案:

答案 0 :(得分:1)

问题在于它将00解释为数值:

In [364]:
import pandas as pd
import io
t="""AU AA GG CC 00 AA TT"""
df = pd.read_csv(io.StringIO(t),header=None,engine='python', sep=' ')
df = df.transpose()
df

Out[364]:
    0
0  AU
1  AA
2  GG
3  CC
4   0
5  AA
6  TT

对于多行,它按预期工作:

In [365]:
t="""AU AA GG CC 00 AA
AK AA GG CC AA 00"""
df = pd.read_csv(io.StringIO(t),header=None,engine='python', sep=' ')
df = df.transpose()
df

Out[365]:
    0   1
0  AU  AK
1  AA  AA
2  GG  GG
3  CC  CC
4  00  AA
5  AA  00

所以我认为上面的错误可能也是。

如果您将引擎更改为默认值并指定dtype,那么它将起作用:

In [373]:
t="""AU AA GG CC 00 AA"""
df = pd.read_csv(io.StringIO(t),header=None, sep=' ', dtype=str)
df.T

Out[373]:
    0
0  AU
1  AA
2  GG
3  CC
4  00
5  AA