Преобразование текста в транспонированный фрейм данных с сохранением имени файла (pandas in python) - PullRequest
0 голосов
/ 16 октября 2018

Проблема

У меня есть несколько файлов результатов, которые я хотел бы перенести и добавить в файл CSV, но также принять входное имя файла в качестве ячейки в CSV.Однако в начале файла результатов есть несколько строк, которые меня не интересуют.

Входные данные

Вот пример входных данных, я толькоЯ хочу получить столбец 'Codon' и столбец 'Fraction' в моем выводе:

#CdsCount: 1727

#Coding GC 31.31%
#1st letter GC 40.68%
#2nd letter GC 30.71%
#3rd letter GC 22.53%

#Codon AA Fraction Frequency Number
GCA    A     0.491    26.008  13458
GCC    A     0.074     3.946   2042
GCG    A     0.073     3.855   1995
GCT    A     0.362    19.202   9936
TGC    C     0.269     3.596   1861
TGT    C     0.731     9.773   5057
GAC    D     0.282    16.152   8358
GAT    D     0.718    41.196  21317
GAA    E     0.878    67.661  35011
GAG    E     0.122     9.388   4858
TTC    F     0.242     8.942   4627
TTT    F     0.758    28.028  14503
GGA    G     0.317    19.627  10156
GGC    G     0.133     8.229   4258
GGG    G     0.097     6.020   3115
GGT    G     0.453    28.034  14506
CAC    H     0.487     7.019   3632
CAT    H     0.513     7.384   3821
ATA    I     0.418    39.884  20638
ATC    I     0.133    12.649   6545
ATT    I     0.449    42.795  22144
AAA    K     0.869    80.385  41595
AAG    K     0.131    12.113   6268
CTA    L     0.049     4.383   2268
CTC    L     0.035     3.200   1656
CTG    L     0.012     1.046    541
CTT    L     0.144    13.022   6738
TTA    L     0.601    54.222  28057
TTG    L     0.159    14.336   7418
ATG    M     1.000    25.150  13014
AAC    N     0.252    18.616   9633
AAT    N     0.748    55.285  28607
CCA    P     0.388    12.142   6283
CCC    P     0.095     2.968   1536
CCG    P     0.089     2.800   1449
CCT    P     0.428    13.398   6933
CAA    Q     0.796    16.404   8488
CAG    Q     0.204     4.207   2177
AGA    R     0.595    17.335   8970
AGG    R     0.186     5.425   2807
CGA    R     0.089     2.582   1336
CGC    R     0.008     0.244    126
CGG    R     0.022     0.638    330
CGT    R     0.100     2.916   1509
AGC    S     0.087     5.336   2761
AGT    S     0.226    13.818   7150
TCA    S     0.325    19.863  10278
TCC    S     0.081     4.957   2565
TCG    S     0.054     3.287   1701
TCT    S     0.226    13.808   7145
ACA    T     0.401    20.599  10659
ACC    T     0.141     7.236   3744
ACG    T     0.108     5.570   2882
ACT    T     0.349    17.932   9279
GTA    V     0.422    26.656  13793
GTC    V     0.050     3.160   1635
GTG    V     0.092     5.834   3019
GTT    V     0.435    27.444  14201
TGG    W     1.000     5.858   3031
TAC    Y     0.310    13.369   6918
TAT    Y     0.690    29.729  15383
TAA    *     0.908     3.030   1568
TAG    *     0.052     0.172     89
TGA    *     0.041     0.135     70

Желаемый вывод

Вот пример вывода, который я хотел бы получить,с именем входного файла в качестве другого столбца, так как я собираюсь выполнить это тысячи раз, код должен быть максимально эффективным и добавляться в один файл результатов:

+----------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+-------+-------+-----+------+------+-------+-------+-------+
|                                        |  GCA  |  GCC  |  GCG  |  GCT  |  TGC  |  TGT  |  GAC  |  GAT  |  GAA  |  GAG  |  TTC  |  TTT  |  GGA  |  GGC  |  GGG  |  GGT  |  CAC  |  CAT  |  ATA  |  ATC  |  ATT  |  AAA  |  AAG  |  CTA  |  CTC  |  CTG  |  CTT  |  TTA  |  TTG  | ATG |  AAC  |  AAT  |  CCA  |  CCC  |  CCG  |  CCT  |  CAA  |  CAG  |  AGA  |  AGG  |  CGA  |  CGC  |  CGG  | CGT |  AGC  |  AGT  |  TCA  |  TCC  |  TCG  |  TCT  |  ACA  |  ACC  |  ACG  |  ACT  |  GTA  | GTC  |  GTG  |  GTT  | TGG | TAC  | TAT  |  TAA  |  TAG  |  TGA  |
+----------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+-------+-------+-----+------+------+-------+-------+-------+
| GCF_000006175.1_ASM617v2_genomic.codon | 0.491 | 0.074 | 0.073 | 0.362 | 0.269 | 0.731 | 0.282 | 0.718 | 0.878 | 0.122 | 0.242 | 0.758 | 0.317 | 0.133 | 0.097 | 0.453 | 0.487 | 0.513 | 0.418 | 0.133 | 0.449 | 0.869 | 0.131 | 0.049 | 0.035 | 0.012 | 0.144 | 0.601 | 0.159 |   1 | 0.252 | 0.748 | 0.388 | 0.095 | 0.089 | 0.428 | 0.796 | 0.204 | 0.595 | 0.186 | 0.089 | 0.008 | 0.022 | 0.1 | 0.087 | 0.226 | 0.325 | 0.081 | 0.054 | 0.226 | 0.401 | 0.141 | 0.108 | 0.349 | 0.422 | 0.05 | 0.092 | 0.435 |   1 | 0.31 | 0.69 | 0.908 | 0.052 | 0.041 |
+----------------------------------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+------+-------+-------+-----+------+------+-------+-------+-------+

Мой код на данный момент:

import pandas as pd
import sys

outfile = open(sys.argv[1], 'r')
list = []
for line in outfile:
    if "codon" in line.lower():
        list.append(line)
        for line in outfile:
            list.append(line)

df = pd.DataFrame({str(outfile):list})
df.to_csv('testresults.csv')

Это получает соответствующие строки из файла результатов и преобразует результаты в CSV с именем файла в качестве столбца, хотя и не транспонирует результатыи формат CSV является неправильным.

1 Ответ

0 голосов
/ 16 октября 2018

Если вы читаете каждый файл в отдельный фрейм данных и добавляете столбец с именем файла, вы можете объединить их вместе и использовать DataFrame.pivot.

# list of all your files:
files = ['codons1.txt','codons2.txt']

col_names =['codon','aa','fraction','frequency','number']

dfs = []
for file in files:
    df = pd.read_csv(file,sep='\s+',comment='#',names=col_names)
    df['filename'] = file
    dfs.append(df)

# Concatenate all the dataframes together:
all_data = pd.concat(dfs)

# And pivot into the desired format:
output = all_data.pivot(index='filename',columns='codon',values='fraction')

# And write to file:
output.to_csv('testresults.csv')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...