我有一个6列的CSV文件。我将其加载到内存中并通过某些方法进行处理。我的结果是一个带有4个列的数据框,如下所示:
name number Allele Allele
aaa 111 A B
aab 112 A A
aac 113 A B
但是现在我得到了另一种格式的csv(没有Illumina),我需要将其更改为上面的格式。
我得到一个结果:
name number Allele1 Allele2
aaa 111 A C
aab 112 A G
aac 113 G G
我知道如何更改格式,例如AG == AB,GG == AA,CC == AA(太)等。 但这是比for循环更好的方法吗?
让我们说:
for line in range(len(dataframe)):
if(dataframe.Allele1[line] == A and dataframe.Allele2[line] == G):
dataframe.Allele1[line] = A
dataframe.Allele2[line] = B
elif:
etc.
我觉得这不是完成此任务的最佳方法。在熊猫或Python中,Meaby是更好的方法吗?
我需要将格式更改为Illumina格式,因为数据库处理的是Illumina。
And:在照度AA = AA,CC,GG; AB = AC,AG,AT,CT,GT; BB = CG,TT等。
So if row[1] in col Allele1 is A and in Allele2 is T, edited row will be: Allele1 = A, Allele2 = B.
预期结果是:
name number Allele1 Allele2
aaa 111 A B
aab 112 A B
aac 113 A A
结果我必须有4列。
答案 0 :(得分:1)
您是否尝试过使用pandas.DataFrame.replace?例如:
df['Allele1'].replace(['GC', 'CC'], 'AA')
使用该行,您可以在“ Allele1”列中替换您要查找的AA的GC和CC值。您可以将该逻辑应用于所需的所有替换,如果您希望在整个数据框中执行该替换,只是不指定该列,请执行以下操作:
df.replace(['GC', 'CC'], 'AA')
答案 1 :(得分:0)
您可以尝试执行此操作(将AG转换为AB):
df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele1'] = 'A'
df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele2'] = 'B'