将DataFrame输出到tsv,如何忽略或覆盖“需要转义”错误

问题描述 投票:0回答:1

这个问题相关,但不同。

我想将 pandas 数据帧输出到 tsv 文件。我的数据的第一列是一个模式,实际上包含 3 位信息,我想将它们分成自己的列:

Range                 c1
chr1:2953-2965       -0.001069
chr1:35397-35409     -0.001050
chr1:37454-37466     -0.001330
chr2:37997-38009     -0.001235
chrX:44465-44477     -0.001292

所以我这样做:

Df = Df.reset_index()
Df["Range"] = Df["Range"].str.replace( ":", "\t" ).str.replace( "-", "\t" )
Df
    Range   c1
0   chr1\t2953\t2965    -0.001069
1   chr1\t35397\t35409  -0.001050
2   chr1\t37454\t37466  -0.001330
3   chr2\t37997\t38009  -0.001235
4   chrX\t44465\t44477  -0.001292

我现在需要做的就是不带标题或索引的输出,并添加一个“ ”来分隔最后一列,我将根据需要获得 4 列输出文件。不幸的是...

Df.to_csv( "~/testout.bed", 
                  header=None,
                  index=False,
                  sep="\t",
                  quoting=csv.QUOTE_NONE,
                  quotechar=""
               )
Error: need to escape, but no escapechar set

这里是我想忽略这个错误的地方,并说“不, python,实际上你不需要需要转义任何东西。我将这些制表符放在那里专门用于创建列分隔符。”

我明白为什么会出现这个错误。 Python 认为我忘记了这些选项卡,这是一个安全措施,但实际上我没有忘记任何事情,而且我知道我在做什么。我知道数据中的制表符与列分隔符无法区分,这正是我想要的。我专门出于这个原因将它们放在那里。 当然必须有某种方法来覆盖这个,不是吗?有没有办法忽略错误并强制输出?

python pandas dataframe escaping bed
1个回答
1
投票

您可以简单地使用

str.split
直接拆分
Range
列 -

df['Range'].str.split(r":|-", expand=True)
#     0      1      2
#0  chr1   2953   2965
#1  chr1  35397  35409
#2  chr1  37454  37466
#3  chr2  37997  38009
#4  chrX  44465  44477

要保留所有列,您只需将此拆分与原始拆分合并即可

df = df.join(df['Range'].str.split(r":|-", expand=True))
© www.soinside.com 2019 - 2024. All rights reserved.