2017-09-03 2 views
0

Ich lese Pakete von RF-Transceiver, wo jedes Paket eindeutige ID hat. Es kann vorkommen, dass einige der Pakete nicht empfangen werden.Python Missing Values ​​Strategie

In Post-Processing-Analyse, ich füge Dummy-Pakete mit Indikator (Spalte PR), die sie nicht empfangen, aber künstlich hinzugefügt, um Paketempfangsrate Diagramm zu ermöglichen. Probe der Datei sieht wie folgt aus:

TS,RxID,RSSI,SNR,PR 
..... 
..... 
252,1,-105,16,1 
504,2,-105,17,1 
756,3,-105,17,1 
1008,4,,,0 
1260,5,-105,16,1 
1512,6,-106,16,1 
1764,7,,,0 
2016,8,-105,16,1 
.... 
.... 

Was soll ich für RSSI und SNR hinzufügen (die in der aktuellen Datei Probe leer sind, wenn PR 0) in der Lage sein, plotten RSSI und SNR-Säule mit Lücken, wo Pakete wurden nicht empfangen. Ich habe versucht, das Einfügen Keine, und leere Zeichenkette, aber immer die gleiche Fehlermeldung erhalten:

could not convert string to float: 'None' 

Der Code, der Dummy-Pakete füllt:

inputFile = 'd:\\f1.txt' 
outputFile = 'd:\\f2.txt' 
timeStamp = 0  
timeConstant = 252 
packetID = 1   
numOfPackets = 20023  

with open(outputFile,'w') as g: 
    while (packetID <= numOfPackets): 
     noPacket = 1 
     with open(inputFile, 'r') as f:   

      for i, line in enumerate(f): 
       line = line.strip() 
       line = line.split(',') 
       currentLine = line 
       auxLine = line 
       if (int(currentLine[1]) == packetID): 
        noPacket = 0 
        auxLine[0] = str(int(packetID * timeConstant)) 
        auxLine.append('1\n') 
        auxLine = ','.join(auxLine) 
        g.write(auxLine) 
        break 

      if (noPacket == 1):  
       auxLine[0] = str(int(packetID * timeConstant)) 
       auxLine[1] = str(packetID) 
       auxLine[2] = str('') #this is the part where the value for RSSI has to be written 
       auxLine[3] = str('') #this is the part where the value for SNR has to be written 
       auxLine.append('0\n') 
       auxLine = ','.join(auxLine) 
       g.write(auxLine) 

      packetID += 1 

     f.close() 

g.close() 

Der Code, der RSSI (das gleiche wie für SNR) Grundstücke:

+0

zeigen Sie Ihren Code bitte –

+0

Sie verwenden nicht 'float()', also wo ist dieser Fehler? Fügen Sie den vollständigen Traceback hinzu –

+0

Btw, 'f.close()' wird nicht benötigt. Die Datei ist bereits geschlossen nach 'mit open()' Verwendung –

Antwort

0

Sie müssen diese fehlenden Werte filtern, in einem solchen Fall würde ich wahrscheinlich "nan" verwenden, um diesen Fall anzuzeigen. Abhängig von der Funktionalität der Plot-Funktion müssen Sie diese Werte möglicherweise vor dem Aufruf von plot aus der rssi-Liste entfernen.

+0

Ich muss RSSI aus mehreren verschiedenen Dateien plotten, um sie zu vergleichen. Wenn das Paket nicht empfangen wird, muss die Lücke in der Handlung vorhanden sein. Alle Dateien sind hinsichtlich der Paket-ID (mit dem bereitgestellten Code) ausgerichtet, um einen Vergleich zu ermöglichen. Die einzige Sache ist, dass ich nicht weiß, wie man diese Lücken plant. – Nikson

+0

Wenn diese "Nan" in der Liste sind, hängt es von der Plot-Funktion ab, wie dieser Fall behandelt wird. In MATLAB würden Sie die gewünschten Lücken bekommen - aber ich weiß nicht, welche Bibliothek Sie hier benutzen und daher ist es schwierig, einen Ratschlag zu geben. – Juergen