如何在python中的两个DataFrame列中更改值

时间:2019-04-18 12:27:18

标签: python pandas dataframe

我有一个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列。

2 个答案:

答案 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'