Возникли проблемы при сравнении двух фреймов данных в pandas - PullRequest
0 голосов
/ 26 января 2020

Я новичок ie и борюсь с pandas фреймами данных.

Вот код:

import csv
import csv
import numpy as np
import pandas as pd

# read the CSV into a pandas data frame (df)
df = pd.read_csv(sys.argv[1], delimiter=',')

print (df)

# to open a .txt file and use sequences as a string
with open(sys.argv[2], 'r') as f:
    contents = f.read()

s = contents
s_len = len(s)
found_s_len = 0
keep_going = True
while s_len>0 and keep_going:
    AGATC = "AGATC" * s_len
    AGATC2 = "AGATC"
    if AGATC in s:
        found_a_len = s_len
        keep_going = False
    s_len=s_len -1
result0 = (AGATC2, found_a_len)

s_len = len(s)
found_s_len1 = 0
keep_going = True
while s_len>0 and keep_going:
    AATG = "AATG" * s_len
    AATG2 = "AATG"
    if AATG in s:
        found_a_len1 = s_len
        keep_going = False
    s_len=s_len -1
result1 = (AATG2, found_a_len1)

s_len = len(s)
found_s_len2 = 0
keep_going = True
while s_len>0 and keep_going:
    TATC = "TATC" * s_len
    TATC2 = "TATC"
    if TATC in s:
        found_a_len2 = s_len
        keep_going = False
    s_len=s_len -1
result2 = (TATC2, found_a_len2)

total_result = (result0, result1, result2)

d = {'AGATC': [found_a_len], AATG2: [found_a_len1], TATC2: [found_a_len2]}
df1 = pd.DataFrame(data=d)

print (df1)

в качестве 1-го аргумента он принимает .csv, который выглядит следующим образом:

name,AGATC,AATG,TATC
Alice,2,8,3
Bob,4,1,5
Charlie,3,2,5

, а в качестве второго аргумента он принимает .txt файл с последовательностью ДНК, которая выглядит как (это просто строка последовательности ДНК «AAGGT ...»:

AAGGTAAGTTTAGAATATAAAAGGTGAGTTAAATAGAATAGGTTAAAATTAAAGGAGATCAGATCAGATCAGATCTATCTATCTATCTATCTATCAGAAAAGAGTAAATAGTTAAAGAGTAAGATATTGAATTAATGGAAAATATTGTTGGGGAAAGGAGGGATAGAAGG

Аргумент командной строки для кода это python dna.py database / small.csv sequence / 1.txt, где small.csv является первым аргументом, а 1.txt - вторым.

я занимаюсь вычислением самых длинных последовательно повторяющихся подстрок ('AGAT C' 'AATG' 'TAT C') вне второго аргумента, а затем посмотрите, соответствует ли количество повторений любому человеку в файле .csv, указанном в первом аргументе.

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

name  AGATC  AATG  TATC
0    Alice      2     8     3
1      Bob      4     1     5
2  Charlie      3     2     5
   AGATC  AATG  TATC
0      4     1     5

, поэтому теперь мне нужно сравнить эти два фрейма данных (df и df1) и посмотреть, если это совпадение. Если оно совпадает, код должен напечатать имя ма человек В этом конкретном примере совпадение должно быть с «Bob», и, следовательно, код должен печатать «Bob». Нужно использовать какие-то операторы IF в pandas. Каждый раз, когда я пытаюсь выполнить сравнение, он возвращает ошибки. Я подозреваю, что это потому, что тип данных различен в обоих случаях, и я очень расстроен, потому что застрял на этом ... Спасибо за помощь!

...