我必须为遗传学软件重新格式化数据,该软件需要将每一列分成两列,例如0-> G G; 1-> A G; 2 -> A A;
。输出文件应该以制表符分隔。我正在尝试在 pandas 中做到这一点:
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
?
sep="\t"
正在尝试获取数据帧行的每个元素并插入"\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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)