Итерация останавливается и выдает ошибку «неподдерживаемый тип операнда» - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь выполнить итерацию, используя цикл for для набора данных, который содержит 1 строку и более 1500 столбцов (объектов).Объектами являются кортежи, содержащие объекты с плавающей точкой.Я могу прикрепить файл CSV, если недостаточно информации, чтобы помочь.Все, что я хочу сделать, это проверить, присутствует ли 1 под каждым столбцом для строки.Любой столбец, содержащий 1, будет отправлен в пустой список.

Я понимаю (думаю, не так хорошо, как я думал) суть генерируемой ошибки (неподдерживаемые типы операндов для +: 'int 'и' tuple ') для выполнения цикла for ниже, но я не уверен, почему он начал выполнять итерацию для подмножества данных, а затем выдал ошибку.

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

Это потому, что время итерации истекло из-за количества точек данных?Опять же, если не совсем ясно, я могу добавить дополнительную информацию.

Я заранее благодарен за помощь!

1 Ответ

0 голосов
/ 25 октября 2018

Данные в столбцах являются кортежами, а не целыми числами, и вы не можете суммировать массив кортежей таким образом.Если вам нужна сумма столбцов, суммируйте значения в кортежах перед суммированием столбца.

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 если какой-либо из логических выражений удовлетворяет вашему лямбда-выражению.

...