Problema: Tengo una trama de datos con varios títulos de las columnas que tienen nombres con las variaciones de las múltiples cadenas: 'Fee_code', 'zip_code', etc., y también algunos otros con: 'street_address', 'Dirección violation_street', etc.
Resultado esperado: Una lista con todos los títulos de las columnas que coinciden con las palabras clave: Cargo, dirección, código, nombre, y posiblemente otros basados en el archivo específico que voy a trabajar en. Tenga en cuenta que sí quiero mantener el 'nombre de la agencia' cabecera de la columna.
Solución: Se me ocurrió esta función para enumerar todas las cadenas mencionadas anteriormente - y algunos más-:
def drop_cols(df):
list1= list(df.filter(like='nam', axis=1))
list1.remove('agency_name')
list2= list(df.filter(like='add', axis=1))
list3= list(df.filter(like='fee', axis=1))
list4 = list(df.filter(like='code', axis=1))
list5 = list(df.filter(like='status', axis=1))
entry= list1+list2+list3+list4+list5
return entry
Este código funciona, pero es voluminoso y me pregunto si hay mejores maneras de lograr lo mismo: Desafío
Muestra de los encabezados de columna: 'ticket_id', 'agency_name', 'inspector_name', 'violator_name', 'violation_street_number', 'violation_street_name', 'violation_zip_code', 'mailing_address_str_number', 'mailing_address_str_name', 'ciudad', 'Estado', " zip_code', 'non_us_str_code', 'país', 'ticket_issued_date', 'hearing_date', 'violation_code', 'violation_description', 'disposición', 'fine_amount', 'admin_fee', 'state_fee', 'late_fee', 'DISCOUNT_AMOUNT' , 'clean_up_cost', 'judgment_amount', 'PAYMENT_AMOUNT', 'balance_due', 'payment_date', 'payment_status', 'collection_status', 'grafitti_status', 'compliance_detail', 'cumplimiento']
Una forma en que podría ir sobre ella:
#create search collection of relevant terms
search='|'.join(['fee','address','code','name'])
#use the filter method in pandas with the regex option
#then drop the 'agency_name' column
#d is the dataframe
d.filter(regex=search,axis=1).drop('agency_name',axis=1)