Удаление строки в файле Excel с помощью Python Pandas на основе нескольких условий

Рейтинг: 0Ответов: 2Опубликовано: 29.05.2023

Пытаюсь решить задачу удаления строк в excel файле на основании нескольких условий (нужно удалить строки содержащте ячейки с цифрами не равными 0 и имеющие ячеки содержащие "+").

path_to_file = filedialog.askopenfilename()
dataFrameFromExcel = pd.read_excel(path_to_file)
    
for i in range(0, int(len(dataFrameFromExcel.index))):
    if dataFrameFromExcel.iloc[i][0]  == "+" and        dataFrameFromExcel.iloc[i][1] != 0 :  
       dataFrameFromExcel = dataFrameFromExcel.drop(labels = i) 
   
name = str("otvet.xlsx") 
dataFrameFromExcel.to_excel(name)

Входные данные:

-   0
-   5
-   2
+   3
-   1
+   1
-   0
+   1
-   2
-   9
-   1
-   3

Выходные данные:

   - 0
 0 - 5
 1 - 2
 3 - 1
 5 - 0
 7 - 2
 8 - 9
 9 - 1
10 - 3

При удалении строк при использовании одного условия явных проблем нет.

Буду признателен за помощь.

Дополнение к коментарию для @Step1709

print(dataFrameFromExcel)

     Статус  Номер  
0      -       0
1      -       5
2      -       2
3      +       3
4      -       1
5      +       1
6      -       0
7      +       1
8      -       2
9      -       9
10     -       1
11     -       3

Ответы

▲ 1

должно решить вашу задачу:

dataFrameFromExcel = dataFrameFromExcel.drop(dataFrameFromExcel[(dataFrameFromExcel[0] == '+') & (dataFrameFromExcel[1] != 0)].index)

Здесь с помощью фильтрации мы получаем индексы строк, которые необходимо удалить, а затем удаляем их с помощью drop.

▲ 0

Можно отфильтровать фрейм с помощью булева массива. Сначала делаем булев массив с условиями '+' и не 0, затем инвертируем его ~ и фильтруем фрейм - в результирующем фрейме останутся только те строки, где в булевом массиве True.

df = pd.DataFrame([['+', '-', '+', '-', '+', '-', '+', '-', '+', '-'], [0, 1, 2, 3, 7, 2, 0, 1, 2, 0]]).T
df = df[~(df[0].eq('+') & df[1].ne(0))]
print(df)
   0  1
0  +  0
1  -  1
3  -  3
5  -  2
6  +  0
7  -  1
9  -  0