代码之家  ›  专栏  ›  技术社区  ›  martin

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

  •  0
  • martin  · 技术社区  · 6 年前

    我有一个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(too)等。 但这是比循环更好的方法吗?

    让我们说:

    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.
    

    我觉得这不是完成这项任务的最佳方法。在熊猫或蟒蛇身上,Meaby是更好的方法?

    和:在illumina中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
    

    1 回复  |  直到 6 年前
        1
  •  1
  •   Newbie_2006    6 年前

    df['Allele1'].replace(['GC', 'CC'], 'AA')
    

    在这一行中,你可以在列“allege1”中替换GC和CC作为你要找的值,AA。您可以将该逻辑应用于所需的所有替换,如果您希望在整个数据帧中执行此操作,只需不指定列,而是执行以下操作:

    df.replace(['GC', 'CC'], 'AA')
    
        2
  •  0
  •   hacker315    6 年前

    您可以尝试以下方法(将AG转换为AB):

    df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele1'] = 'A'
    df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele2'] = 'B'