У меня есть файл вкладок, и я хочу разделить функции (восходящие, нисходящие, нисходящие, аннотировать или ...) гена на стандартные функции. последние два столбца - это столбцы результатов для cond_a и cond_b, которые я хочу получить. Я писал код, чтобы иметь возможность сохранять каждую строку в кортеже, а затем искать в кортежах и выполнять деления, но меня это сбивало с толку. Как я могу сделать это на Python?

for line in open(myfile,"r").readlines():
    Fld = line.strip().split("\t")
    gene,feature,cond_a,cond_b= Fld[0],Fld[1],int(Fld[2]),int(Fld[3])

gene feature  cond_a cond_b     
A   upstream    2      5    2/5   5/8
A   standard    5      8    5/5   8/8
C   standard    4      23   4/4   23/23
D   downstrs    3      1    3/9   1/5
D   standard    9      5    9/9   5/5
H   standard    2      9    2/2   9/9
H   downupst    1      2    1/2   2/9
H   annotate    4      8    4/2   8/9
0
NamAshena 30 Июн 2016 в 17:41
Уточните пожалуйста свой вопрос. Неясно, как будут рассчитываться последние две строки. Также, пожалуйста, покажите, что вы пытались сделать для расчета до сих пор.
 – 
SiHa
30 Июн 2016 в 17:51
У каждого гена есть только одна стандартная функция, но у него может быть много других функций, моя цель - разделить другие функции (нестандартные, у них могут быть любые имена) гена по стандарту. Я знаю, как это сделать в R, но понятия не имел, как это сделать на Python.
 – 
NamAshena
30 Июн 2016 в 17:59

2 ответа

Трудно точно сказать, что вы хотите (для справки в будущем лучше опускать технические детали, относящиеся к полевым работам, а не к программированию - это облегчит задачу тем из нас, кто ничего не знает о генах, чтобы помочь), и я не могу расскажите, как вы точно рассчитываете эти два столбца. Однако это похоже на работу для Pandas. Вы бы сделали такой простой пример:

import pandas as pd
data = {'gene':['A', 'C', 'D'], 'cond_a':[2,3,4], 'cond_b':[5,6,7]}
df = pd.DataFrame(data)

df['new_col'] = df['cond_a'] / df['cond_b']

Для ваших данных вы должны загрузить его с помощью:

df = pd.read_csv(myfile, delimiter='/t')

Как бы вы ни рассчитывали свои другие столбцы, вы можете сделать это довольно легко с помощью Pandas. Кроме того, вы можете группировать по различным категориям для работы с подмножествами и так далее.

0
Jeff 30 Июн 2016 в 17:54

Спасибо, но это не то, что я хочу вычислить, давайте проясним вопрос, первые 2/5 делят первую строку (2) на вторую строку (5) (стандарт гена A). 5/5 - это деление на себя, потому что стандартно 1. последняя строка (4/2) делит последнюю строку на строку с номером 6
А _____ вверх по течению _____ 2 _____ 2/5
А _____ стандарт _____ 5 _____ 5/5
C _____ стандарт _____ 4 _____ 4/4
D _____ downstrs ____ 3 _____ 3/9
Д _____ стандарт _____ 9 _____ 9/9
H _____ стандарт _____ 2 _____ 2/2
H _____ downupst ____ 1 _____ 1/2
H _____ аннотировать _____ 4 _____ 4/2

0
NamAshena 30 Июн 2016 в 18:10
Пожалуйста, объясните вопрос четко: в стандарте H _____ _____ 2 _____ 2/2, почему разделение 2/2, почему не 2/1, и следующее предложение, почему 1/2, а не 1/4?
 – 
Jeril
30 Июн 2016 в 18:19
Спасибо, он сам по себе стандартный и должен быть разделен на себя, который равен 1. Если у нас есть только ген H, я хочу разделить нестандартные на стандартные в этом гене. Здесь показаны подразделения для гена H: H_____downupst____1 следует разделить на H_____standard_____2 H_____downupst____1 следует разделить на H_____standard_____2 H_____standard_____2 следует разделить на H_____standard_____2
 – 
NamAshena
30 Июн 2016 в 18:23
H_____downupst____1 следует разделить на H_____standard_____2 (1/2)
 – 
NamAshena
30 Июн 2016 в 18:33
H_____annotate_____4 следует разделить на H_____standard_____2 (4/2)
 – 
NamAshena
30 Июн 2016 в 18:34
H_____standard_____2 следует разделить на H_____standard_____2 (2/2)
 – 
NamAshena
30 Июн 2016 в 18:34