Как удалить записи, имеющие значения в определенных столбцах?

#python #pandas

Вопрос:

Я объединил 2 кадра данных, evt_df и eff_df. Evt_df содержит столбцы, такие как evt_id, evt_name, evt_email, eff_df содержит столбцы, такие как eff_id, eff_name, eff_email. Я хочу удалить записи, которые имеют значения в столбцах, начинающихся с «eff».

Я получил:

 EVT_ID  EVT_STATUS  EVT_VALIDFROM   EFF_ID  EFF_STATUS  EFF_VALIDFROM
ORLE-20210205   VAL 19.02.2021 12:48    ORLE-20210205   VAL 28.03.2021 12:54
ORLE-20210205   VAL 19.02.2021 12:48    ORLE-20210205   VAL 28.03.2021 12:54
ORLE-20210305   VAL 17.03.2021 15:12    ORLE-20210305   VAL 30.03.2021 09:48
ORLE-20210305   VAL 17.03.2021 15:12            
ORLE-20200304   VAL 05.03.2020 18:36            
ORLE-20200304   VAL 05.03.2020 18:36            
ORLE-20190930   VAL 01.10.2019 12:04            
ORLE-20200304   VAL 05.03.2020 18:36    
 

Я хочу:

 EVT_ID  EVT_STATUS  EVT_VALIDFROM   EFF_ID  EFF_STATUS  EFF_VALIDFROM
ORLE-20210305   VAL 17.03.2021 15:12            
ORLE-20200304   VAL 05.03.2020 18:36            
ORLE-20200304   VAL 05.03.2020 18:36            
ORLE-20190930   VAL 01.10.2019 12:04            
ORLE-20200304   VAL 05.03.2020 18:36            
    
 

Я пытался:

 df = pd.read_excel('C:/Users/PI33588/Desktop/eff_month_all.xlsx')
print(len(df.index))
df = df[(df.filter(regex='EFF', axis=1)=='').any(1)]
print(len(df.index))
 

Получил;
8
0

Ответ №1:

Запустите этот код: data.loc[:,data.columns.str.startswith('eff')] = None

Вот мой пример: введите описание изображения здесь

Комментарии:

1. Не сработало. Я пытался: df = pd.read_excel(‘C:/Users/PI33588/Desktop/eff_month_all.xlsx’) печать(df.столбцы) df.loc[:,df.столбцы.str.startswith(‘EFF_’)] = Нет печати(df.столбцы)

2. имена столбцов указаны в верхнем или нижнем регистре ?

3. С eff_ тоже не получилось

4. Странный. Это действительно работает на меня. Можно ли увидеть ваш окончательный df ?

Ответ №2:

отфильтруйте столбцы с разбивкой по значениям и строкам, в которых есть пустые места

 df[(df.filter(regex='^eff', axis=1)=='').any(1)]



evt_id evt_name evt_email eff_id eff_name eff_email
     x      xxx       xxx                          
     x      xxx       xxx                          
     x      xxx       xxx 

  
 

Комментарии:

1. Я хочу выбрать столбцы.

2. что вы имеете в виду, когда хотите выбрать столбцы? Рад помочь

3. Вы можете добавить df.style.hide_index() , если хотите скрыть индекс

4. Я хочу удалить записи, которые имеют какие-либо значения в столбцах, начинающихся с eff. Некоторые записи могут быть пустыми в столбцах evt, и ваше решение не поможет.

5. Посмотрите мою правку и дайте нам знать