Как изменить значение в двух столбцах DataFrame в Python - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть файл CSV с 6 столбцами.Я загружаю его в память и обрабатываю несколькими способами.Мой результат - фрейм данных с 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 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, потому что база данных имеет дело с Illumina.

И: в 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

В результате я ДОЛЖЕН иметь 4 столбца.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы пробовали использовать pandas.DataFrame.replace?Например:

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

С помощью этой строки вы можете заменить в столбце «Allele1» значения GC и CC на искомое, AA.Вы можете применить эту логику для всех замен, которые вам нужны, и если вы хотите сделать это во всем фрейме данных, просто не указывайте столбец, вместо этого сделайте что-то вроде:

df.replace(['GC', 'CC'], 'AA')
0 голосов
/ 18 апреля 2019

Вы можете попробовать это (для преобразования AG в AB):

df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele1'] = 'A'
df.loc[df['Allele1'] == 'A' & df['Allele1'] == 'G', 'Allele2'] = 'B'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...