2016-07-20 17 views
0

Ich arbeite mit der eda-explorer Python-Bibliothek von MIT, die es ermöglicht, physiologische Dateien von bestimmten tragbaren Biosensoren zu importieren. Dieses Libraray verwendet Pandas DataFrames zum Speichern der physiologischen Zeitreihen. Ich habe diese Bibliothek in verschiedenen Computer-Setups benutzt. Wenn ich versuche, es in meiner Ubuntu 15.10-Umgebung zu verwenden, erhalte ich eine Fehlermeldung, die ich nicht verstehe. Es wird auf die folgende Funktion bezogen, die in immer die Daten in einem Datenrahmen und dabei einige intitial Transformationen instrumental ist:Python Pandas Dataframe Index, Fehler TypeError: Eingabe muss iterierbar sein, Pandas Version vielleicht falsch

def loadData_E4(filepath): 

    # Load data 
    data = pd.DataFrame.from_csv(os.path.join(filepath,'EDA.csv')) 
    data.reset_index(inplace=True) 

    # Get the startTime and sample rate 
    startTime = pd.to_datetime(float(data.columns.values[0]),unit="s") 
    sampleRate = float(data.iloc[0][0]) 
    data = data[data.index!=0] 
    data.index = data.index-1 

Daraus ergeben sich die folgenden Fehlermeldungen:

In [1]: 

run batch_edaexplorer_template.py 

Classifying data for ...[my file location]... 


--------------------------------------------------------------------- 
    TypeError         Traceback (most recent call last) 
    /...mypath/eda-explorer-master/batch_edaexplorer_template.py in <module>() 
     69   elif dataType=='e4': 
     70    print "Classifying data for " + filepath 
---> 71    labels,data =  classify(filepath,classifierList,pickleDirectory,lf.loadData_E4) 
    72   elif dataType=="misc": 
    73    print "Classifying data for " + filepath 

/...mypath/eda-explorer-master/EDA_Artifact_Detection_Script.pyc in classify(filepath, classifierList, pickleDirectory, loadDataFunction) 
    225 
    226  # Load data 
--> 227  data = loadDataFunction(filepath) 
    228 
    229  # Get pickle List and featureNames list 

/...mypath/eda-explorer-master/load_files.pyc in loadData_E4(filepath) 
    58  sampleRate = float(data.iloc[0][0]) 
    59  data = data[data.index!=0] 
---> 60  data.index = data.index-1 
    61 
    62  # Reset the data frame assuming 4Hz samplingRate 

/usr/lib/python2.7/dist-packages/pandas/core/index.pyc in __sub__(self, other) 
    1161    warnings.warn("using '-' to provide set differences with Indexes is deprecated, " 
    1162       "use .difference()",FutureWarning) 
-> 1163   return self.difference(other) 
    1164 
    1165  def __and__(self, other): 

/usr/lib/python2.7/dist-packages/pandas/core/index.pyc in difference(self, other) 
    1314 
    1315   if not hasattr(other, '__iter__'): 
-> 1316    raise TypeError('Input must be iterable!') 
    1317 
    1318   if self.equals(other): 

TypeError: Input must be iterable! 

ich nicht bekommen Diese Fehlermeldung auf meinem Windows-PC. Ich benutze Pandas Version 0.15.0 in der Ubuntu-Umgebung. Ist das vielleicht das Problem, dass die bestimmte Syntax des Index nur in höheren Versionen von Pandas erlaubt ist? Wie sollte ich die Syntax korrigieren, so dass sie mit älteren Versionen von Pandas funktioniert? Oder verpasse ich den Punkt?

+1

Versuchen Sie 'data.index = pd.Index (data.index.values-1)' anstelle von 'data.index = data.index-1'. –

+0

Ja, das hat das Problem behoben. Vielen Dank! War das tatsächlich eine Änderung der zulässigen Syntax in Bezug auf Datenrahmenindizes in verschiedenen Pandas-Versionen? –

+0

Ich denke, es war eine Ergänzung in einer späteren Version, ja. Ich habe meinen Kommentar als Antwort hinzugefügt, damit Sie ihn akzeptieren können. –

Antwort

1

Versuchen Sie data.index = pd.Index(data.index.values-1) anstelle von data.index = data.index-1.