0

我正在尝试使用 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

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

我提前感谢您的帮助!

4

1 回答 1

0

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

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)):

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

于 2018-10-25T18:27:03.147 回答