pandas:用不带引号的文本制表符编写制表符分隔的数据框

2024-04-29 08:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须重新格式化遗传学软件的数据,该软件要求将每一列分成两列,例如0-> G G; 1-> A G; 2 -> A A;。输出文件应该是制表符分隔的。我想在熊猫身上做:

import csv
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,3, size = (10,5)), 
                  columns=[ chr(c) for c in range(97, 97+5) ])

def fake_alleles(x):
    if x==0:
        return "A\tA"
    if x==1:
        return "A\tG"
    if x==2:
        return "G\tG"

plinkpast6 = df.applymap(fake_alleles)
plinkpast6.to_csv("test.ped", sep="\t", quoting=csv.QUOTE_NONE)

这给了我一个错误Error: need to escape, but no escapechar set。用pandas还有其他方法吗?


Tags: csvtoimportpandasdfreturnifas
1条回答
网友
1楼 · 发布于 2024-04-29 08:35:11

sep="\t"试图获取dataframe行的每个元素,并在其中插入一个"\t"。问题是元素中有"\t",这让人困惑。它想让你摆脱元素中的那些"\t"而你没有。我怀疑你希望你的最终输出是6列。

试试这个:

import csv
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,3, size = (10,20)))

def fake_alleles(x):
    if x==0:
        return "A\tA"
    if x==1:
        return "A\tG"
    if x==2:
        return "G\tG"

plinkpast6 = df.iloc[:,:3].applymap(fake_alleles)
plinkpast6 = plinkpast6.stack().str.split('\t', expand=True).unstack()
plinkpast6.to_csv("test.ped", sep="\t", quoting=csv.QUOTE_NONE)

相关问题 更多 >