2015-12-08 2 views
0

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

# Import data from inputFile into list 
with open(r"C:\..file.dat") as inputFile: 
    inputList = list(inputFile) 

totalSegs = 775 
totalPrds = 938 

stressPrd = 1 
segNum = 1 
testList = [] 
masterList = [] 

while stressPrd <= totalPrds: #build a list of times 
    testList.append(0) 
    stressPrd += 1 

while segNum <= totalSegs: #build a list of locations 
    masterList.append(testList) #list of time periods by location 
    segNum += 1 

stressPrd = 1 
segNum = 1 

for inputItem in inputList: #read data from file and write to lists 
    if inputItem != '\n' 
     inputItem = inputItem.split() 
     if int(inputItem[3]) == int(segNum): 
      testVar = float(masterList[segNum - 1][stressPrd - 1]) 
      testVar += float(inputItem[6]) 
      masterList[segNum - 1][stressPrd - 1] = testVar 
     else: 
      segNum += 1 
      if segNum <= totalSegs: 
       testVar = float(masterList[segNum - 1][stressPrd - 1]) 
       testVar += float(inputItem[6]) 
       masterList[segNum - 1][stressPrd - 1] = testVar 
      else: 
       segNum = 1 
       stressPrd += 1 
       testVar = float(masterList[segNum - 1][stressPrd - 1]) 
       testVar += float(inputItem[6]) 
       masterList[segNum - 1][stressPrd - 1] = testVar 

Что должно произойти в том, что данные в одном месте (segNum) с того же времени (stressPrd) суммируются и хранятся в подсписке организованного stressPrd, а затем этот список для данного местоположения по времени хранится segNum в родительском списке. Однако происходит то, что сценарий вместо этого суммирует все данные по всем местоположениям в течение заданного времени (stressPrd), и эта сумма сохраняется в каждом подсети местоположения.

Я попытался вставить некоторые заявления печати, чтобы отслеживать, что происходит с несколькими под-списками одновременно, и все они начинают подсчитывать одну и ту же сумму одновременно. Мои переменные segNum и stressPrd оба кажутся правильными, и, насколько я могу судить, мои инструкции If выполняются правильно, так что мне трудно понять источник проблемы.

В очень упрощенном примере результата я хочу:

Data: 
Loc Time1 Time2 
A  6  1 
A  2  2 
B  2  3 
C  5  4 
C  1  1 

Result: 
[[8,3],[2,3],[6,5]] 

Спасибо заранее!

ответ

0

Вместо того, чтобы пытаться отладить конкретную проблему, возникающую здесь, я настоятельно рекомендую переключиться на панды, если вы работаете с табличными данными. Это довольно просто проблема есть:

In [16]: import pandas as pd 

In [17]: from StringIO import StringIO 

In [18]: datatable = """Loc Time1 Time2 
A  6  1 
A  2  2 
B  2  3 
C  5  4 
C  1  1""" 

In [19]: df = pd.read_csv(StringIO(datatable), sep=" +", engine="python") 

In [20]: df.groupby("Loc").sum() 
Out[20]: 
    Time1 Time2 
Loc 
A  8  3 
B  2  3 
C  6  5 

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

In [28]: [list(v[1].values) for v in df.groupby("Loc").sum().iterrows()] 
Out[28]: [[8, 3], [2, 3], [6, 5]] 

 Смежные вопросы

  • Нет связанных вопросов^_^