Dim*_*iev 5 python numpy dataframe pandas
我必须为遗传学软件重新格式化我的数据,这需要将每一列分成两列,例如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)
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误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)
Run Code Online (Sandbox Code Playgroud)