Скрипт Pandas застревает на сервере Unix, но не на Windows - PullRequest
0 голосов
/ 29 октября 2018

Я написал скрипт Pandas, применяя математическую функцию к каждой строке в кадре данных Pandas, как показано ниже:

import pandas as pd
import sys

numbers = pd.read_csv(sys.argv[1], sep="\t", header=None)

combinations = pd.read_csv(sys.argv[2], sep=" ", header=None)

pop = int(int(sys.argv[4]) + 5)

def score_freq(line):
    score=0
    freq=1
    for j in range(len(line)):
        if line[j][1] != numbers.values[j][1]:   # homozygous for ref
            score+=0
            freq*=(float(1-float(numbers.values[j][pop]))*float(1-float(numbers.values[j][pop])))
        elif line[j][0] != numbers.values[j][1] and line[j][1] == numbers.values[j][1]: # heterozygous
            score+=(float(numbers.values[j][5]))
            freq*=(2*(float(1-float(numbers.values[j][pop]))*float(numbers.values[j][pop])))
        elif line[j][0] == numbers.values[j][1]:
            score+=2*(float(numbers.values[j][5]))
            freq*=(float(numbers.values[j][pop])*float(numbers.values[j][pop]))

        if freq < sys.argv[3]:   # threshold to stop loop in interest of efficiency 
            break

    return pd.Series([score, freq])

combinations[['score', 'freq']] = combinations.apply(lambda row: score_freq(row), axis=1)

combinations.to_csv(sys.argv[5], index=False, header=False)

Входной файл для «чисел» таков:

SNP1             A       T       1.25    0.223143551314     0.97273 
SNP2             C       G       1.07    0.0676586484738    0.3     
SNP3             T       A       1.08    0.0769610411361    0.1136 

В то время как ввод для «комбинаций» таков:

    AA   CC   TT
    AT   CC   TT
    TT   CC   TT
    AA   CG   TT
    AT   CG   TT
    TT   CG   TT
    AA   GG   TT
    AT   GG   TT
    TT   GG   TT
    AA   CC   TA
    AT   CC   TA
    TT   CC   TA
    AA   CG   TA
    AT   CG   TA
    TT   CG   TA
    AA   GG   TA
    AT   GG   TA
    TT   GG   TA
    AA   CC   AA
    AT   CC   AA
    TT   CC   AA
    AA   CG   AA
    AT   CG   AA
    TT   CG   AA
    AA   GG   AA
    AT   GG   AA
    TT   GG   AA

Переменная «pop» предназначена для обработки дополнительных столбцов, которые могут присутствовать во входной таблице «numbers», поскольку дополнительные столбцы будут представлять частоты для дополнительных групп.

Проблема, с которой я здесь сталкиваюсь, заключается в том, что при запуске моего скрипта в Windows это занимает менее секунды, но оно застревает при запуске его на моем Unix-сервере. Я позволил программе работать более 30 минут, но она не завершается.

Самый последний звонок:

combinations[['score', 'freq']] = combinations.apply(lambda row: score_freq(row), axis=1)

Кто-нибудь знает, что происходит?

...