【问题标题】:Iteration stops and throw "unsupported operand type" error迭代停止并抛出“不支持的操作数类型”错误
【发布时间】:2018-10-26 02:43:25
【问题描述】:

我正在尝试使用 for 循环对包含 1 行和 1500 多列(特征)的数据集进行迭代。这些特征是包含浮动对象的元组。如果没有足够的信息可以提供帮助,我可以附上 csv 文件。我要做的就是检查该行的每一列下是否存在 1。任何包含 1 的列都将被发送到一个空列表。

我理解(猜想不如我想的那么好)为执行下面的 for 循环而引发的错误的核心(+: 'int' 和 'tuple' 不支持的操作数类型),但是我不知道为什么它开始迭代数据的子集,然后抛出错误。

for x in range(1,2):
peaks_to_delete = []   #empty list to add column labels (tuples)
index_to_delete = []   #empty list to add row
df1 = df_850.iloc[0]   #df_850 is dataframe
df2 = pd.DataFrame(df1)
df3 = df2.T
for col in df3:
    if sum(df3[col]) == 1:   #this is where it throws the error
        peaks_to_delete.append(col)
for index in df3.index:
    index_to_delete.append(index)
df_850.drop(peaks_to_delete, axis=1, inplace=True)   #drops the column from the dataset
df_850.drop(index_to_delete, inplace=True)   #drops the index (row label) from dataset

是不是因为数据点多导致迭代超时?同样,如果不完全清楚,我可以添加其他信息。

提前感谢您的帮助!

【问题讨论】:

  • 你能发布 df_850.head() 吗?
  • 我该怎么做?
  • print(df_850.head(10) 是你需要执行的语句。

标签: python iteration unsupportedoperation


【解决方案1】:

列中的数据是元组而不是整数,您不能以这种方式对元组数组求和。如果您想要列的总和,请在对列求和之前对元组中的值求和。

if sum(df[col].apply(lambda x: sum(x))) == 1:

如果要检查某个列值是否包含1,可以检查列值的任何元组中是否有1。

if any(df[col].apply(lambda x: 1 in x)):

如果要检查任何列值是否等于1

if any(df[col].apply(lambda x: x == 1)):

如果任何布尔值满足您的 lambda 表达式,上述示例中的any 将返回True

【讨论】:

  • 对不起,我没有很好地解释情况,但列中的数据是整数,列标签是元组。
  • 您想检查是否有任何列值包含1,然后附加到peaks_to_delete
  • 确切地说,将元组(列名)附加到该列表中。它迭代了前 60 列,然后停止了......
  • 我编辑了我的答案以包括是否有任何列值等于1。如果您想要更具体的答案,请发布您的df 的示例以及您的预期结果。
  • 是的,这个建议也没有用。我很感激你的帮助。我会尝试发布数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2020-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多