Запись строк чисел в CSV-файл, если они соответствуют заголовку - PullRequest
0 голосов
/ 27 января 2020

У меня 32 разделенных табуляцией текстовых файла следующего формата (показаны 3):

Имя файла: 90-4-0

gene_ID Genes Frag TPM Func
    1   23    34   43 some_function1
    2   43    66   11 some_function2
    3   54    22   88 some_function3

Имя файла: 150-2-1

gene_ID Genes Frag TPM Func
    1   1    34   5    some_function1
    6   22    2   11   some_function6
    3   9     1   54   some_function3

Имя файла: 90-2-0

gene_ID Genes Frag TPM Func
    9   54    21   4   some_function9
    11   2    6   143  some_function11
    3   99    44   8   some_function3

и т. Д., Около 2000 строк для каждого файла. Имена файлов 32 файлов имеют формат «SampleID-Timepoint-Status», все 3 дескриптора разделены символом «-».

  • SampleID может быть любым двумя или тремя числами * git.
  • Временная точка - это число от 1-4
  • Статус равен 0 или 1

Теперь я хочу, чтобы мой конечный вывод выглядел следующим образом (pref в формате csv ):

Sample_ID Timepoint Status gene_ID1 gene_ID2 gene_ID3 gene_ID6 gene_ID9 gene_ID11 *etc*.
90        4         0      43       11       88       0        0         0
150       2         1      5        0        54       11       0         0
90        2         0      0        0        8        0        4         143
*etc*

Номер всех идентификаторов gene_ID взят из столбца «TPM» в файлах. «Гены», «Frag» и «Fun c» можно игнорировать. Я просто показал их ради форматирования. Конечный файл будет примерно размером 32x2000. Имейте в виду, что число gene_ID для каждого файла может варьироваться. Для Sample_ID, которые не имеют значений для некоторых из gene_ID, следует сказать «0» (как показано в таблице).

Теперь я знаю, как извлечь из файла идентификаторы, временные точки и статус имена, и я знаю, как получить все из 32 файлов в словаре. Я попробовал практически любую комбинацию с помещением всего в словарь. Я также попытался поместить каждые 32 Sample_ID в 32 отдельных списка с соответствующими значениями, но я не могу понять, как связать их с «gene_ID». Если я помещу их все в список в формате:

Sample_ID Timepoint Status TPM_value ... TPM_value_n

Как связать значения "TPM" с "gene_IDs"?

Я открыт для всех предложений или код помощи, если у вас есть время.

Спасибо !!

1 Ответ

0 голосов
/ 27 января 2020

Используя pd.concat, вы можете объединять строки, не заполняя все нулевые значения.

row_1 = pd.DataFrame({'Sample_id':[90],'Timepoint':[4],'Status':0,'gene_1':[43],'gene_3':[88],'gene_6':[56]})
row_2 = pd.DataFrame({'Sample_id':[150],'Timepoint':[2],'Status':1,'gene_2':[53],'gene_3':[18],'gene_5':[16]})

df = pd.concat([row_1,row_2],axis=0)

Вернет:

    Sample_id  Status  Timepoint  gene_1  gene_2  gene_3  gene_5  gene_6
0         90       0          4    43.0     NaN      88     NaN    56.0
0        150       1          2     NaN    53.0      18    16.0     NaN

И затем заменит NaNs

df = df.replace(np.NaN,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...