python pandas dataframe index,错误TypeError:输入必须是可迭代的,pandas版本可能错误

Posted

技术标签:

【中文标题】python pandas dataframe index,错误TypeError:输入必须是可迭代的,pandas版本可能错误【英文标题】:python pandas dataframe index, error TypeError: Input must be iterable, pandas version perhaps wrong 【发布时间】:2016-11-24 01:03:59 【问题描述】:

我正在使用 MIT 的 eda-explorer python 库,它允许从特定的可穿戴生物传感器导入生理数据文件。这个库使用 pandas DataFrames 来存储生理时间序列。我一直在不同的计算设置中使用这个库。当我尝试在我的 ubuntu 15.10 环境中使用它时,我收到一条我不明白的错误消息。它与以下函数有关,该函数有助于将数据放入 DataFrame 并进行一些初始转换:

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

这会导致以下错误消息:

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!

我的 Windows PC 上没有收到此错误消息。我在 ubuntu 环境中使用 pandas 0.15.0 版。这可能是与索引相关的特定语法仅在更高版本的熊猫中允许的问题吗?我应该如何更正语法以使其适用于旧版本的熊猫?还是我没抓住重点?

【问题讨论】:

试试data.index = pd.Index(data.index.values-1) 而不是data.index = data.index-1 是的,这解决了问题。谢谢!这是否确实改变了与各种 pandas 版本中的数据框索引相关的允许语法? 我猜这是在以后的版本中添加的,是的。我已将我的评论添加为答案,以便您接受。 【参考方案1】:

试试data.index = pd.Index(data.index.values-1) 而不是data.index = data.index-1

【讨论】:

以上是关于python pandas dataframe index,错误TypeError:输入必须是可迭代的,pandas版本可能错误的主要内容,如果未能解决你的问题,请参考以下文章

python pandas dataframe 去重函数

python pandas dataframe 去重函数

python dataframe pandas使用int删除列

如何从 Python Pandas DataFrame 中的循环结果中删除重复项?

python使用pandas后如何利用DataFrame拆分列

python pandas dataframe 写入hdfs