Herramienta intuitiva para filtrar múltiples archivos CSV o múltiples columnas en un archivo CSV con solicitudes IF complejas

Tengo una gran lista de correo electrónico a la que transmito, donde cada suscriptor tiene varias etiquetas. Mi sistema de transmisión de correo electrónico me permite descargar cada etiqueta como un archivo CSV separado que contiene todas las direcciones de correo electrónico etiquetadas* y no contiene las que no tienen la etiqueta.

Necesito combinar estas etiquetas de formas complejas, de modo que básicamente pueda crear un nuevo conjunto de etiquetas para volver a cargarlas en el sitio, como un nuevo archivo CSV para importar.

El software funcionaría con los archivos CSV originales (lo que sería menos trabajo para mí) o con un archivo resultante que crearía al combinarlos en un archivo CSV con correos electrónicos como la primera columna y etiquetas como todas las demás columnas. , con algún booleano 1/0 o sí/no, etc.

Esto no sería una excepción, por lo que es necesario contar con un sistema para realizar estos procesos con frecuencia.

Analizando los datos para crear un nuevo archivo

Me gustaría tomar los datos (ya sea de archivos CSV separados de una columna, o simplemente del nuevo archivo CSV único resultante con varias columnas) y comparar las combinaciones sí/no de las etiquetas para cada correo electrónico y según combinaciones (ver a continuación), decida si ese correo electrónico se incluye o se ignora.

Este podría ser un caso simple de agregar una nueva columna 0 o 1 al mismo archivo CSV "gran" (que luego podría agregar el paso adicional de filtrar solo '1' al archivo CSV final) o agregar/no agregar ese correo electrónico en sí al archivo CSV final.

Necesidad de operaciones complejas

Aquí hay una muestra del tipo de procesos que necesitaría ejecutar:

  • todo de (etiqueta1, etiqueta7, etiqueta8) y NO (etiqueta2, etiqueta20)
  • al menos 2 de cualquiera de (etiqueta11, etiqueta12, etiqueta13, etiqueta14, etiqueta15, etiqueta16, etiqueta17, etiqueta18)
  • (si está presente la etiqueta17, Y cualquiera de (etiqueta22, etiqueta23, etiqueta24)) O (si está presente la etiqueta18, Y cualquiera de (etiqueta25, etiqueta26, etiqueta27))
  • solo tag24, y NO cualquier otra etiqueta
  • solo etiqueta24, y NO ninguna de (etiqueta 11, etiqueta12, etiqueta13, etiqueta14)

A partir de algunas investigaciones en línea, puedo ver que la solución a mi problema probablemente implique escribir el código en python o similar, pero espero que haya una aplicación de software fácil de usar que pueda hacerlo para poder lograr lo que quiero. d como sin codificación.

Si se requiere codificación, idealmente se mantendría al mínimo, o tendría un script listo para usar que solo necesitaría modificar las fuentes de archivos y las solicitudes if . Me siento cómodo con la escritura de estructuras . De lo contrario, tengo experiencia básica en codificación y puedo aprender lo que necesito hacer en ese entorno de software.

Soy dueño de Excel 2017 (tal vez hay un complemento que no conozco para mis filtros complejos) y puedo pagar el software para hacer esto si es necesario, dependiendo de su funcionalidad, aunque las funciones más allá de lo que he descrito aquí no son no es necesario

Gracias por cualquier recomendación!!

*El archivo CSV descargado también tiene su nombre en otra columna, pero lo eliminaría a los efectos de este proceso.

Respuestas (2)

Lo cargaría en PostgreSQL y luego usaría SQL para consultarlo. Esas son operaciones bastante complejas.

Hice una pregunta similar relacionada con el mismo problema y finalmente llegué a una respuesta que puedo aplicar directamente aquí.

Un programa simple para hacer esto en una interfaz gráfica o muy simple puede o no existir, pero esencialmente parecería que la forma más fácil de hacerlo es con la biblioteca pandas dentro de Python . Aquí hay documentación para configurarlo .

Una de las razones principales es que este lenguaje de programación es muy sencillo de aprender (más que SQL, sugerido por el otro respondedor, y no estoy de acuerdo con que las operaciones sean tan complejas), y diría que podría estar al tanto de con una tarde de aprendizaje de la programación básica de Python (especialmente si ha aprendido algún tipo de programación en el pasado) y la comprensión de la lógica booleana básica.

Tomando el primer ejemplo que cité y cómo se implementaría en Python, con la biblioteca de pandas importada (y eliminando algún otro código como configurar las bases de datos, etc.), podría representarse de la siguiente manera, asumiendo una tabla con columnas llenas con estas etiquetas y valores en las celdas como Verdadero o Falso:

  • todo de (etiqueta1, etiqueta7, etiqueta8) y NO (etiqueta2, etiqueta20)

result = alldata[(alldata[tag1] & alldata[tag7] & alldata[tag8]) & ~(alldata[tag2] | alldata[tag20])]

Para explicar esto brevemente, si sus datos se importan a un marco de datos de valores llamado "alldata", entonces llamar a "alldata[tag1]" devolverá una lista de variables verdaderas y falsas en una matriz unidimensional, correspondiente a los puntos en el dataframe donde tag1 es verdadero o falso. Entonces

alldata[tag1] & alldata[tag7] & alldata[tag8]

combinará cada una de estas tres etiquetas, de modo que obtendrá una matriz de la misma longitud, pero ahora solo tiene valores verdaderos cuando los tres eran verdaderos y falso de lo contrario.

Similarmente,

alldata[tag2] | alldata[tag20]

combinará una matriz de Verdadero/Falso para etiqueta2 y etiqueta20, y devolverá valores de Verdadero cuando uno sea verdadero y Falso solo si ambos son Falso.

La operación ~ invertirá esto y convertirá todo lo verdadero en falso y todo lo falso en verdadero.

Luego, el & entre la primera y la segunda parte las combinará de tal manera que las partes resultantes de la matriz solo permanezcan verdaderas si la respuesta fue verdadera tanto en la primera como en la segunda.

Esto le deja con una matriz resultante de valores Verdadero y Falso, donde "Verdadero" corresponde a un punto donde todas las etiquetas 1, etiqueta 7 y etiqueta 8 son verdaderas y etiqueta 2 o etiqueta 20 son Falsas.

Pero si vuelve a introducir esta nueva matriz como una llamada entre corchetes (hasta ahora solo hemos introducido tagX en los corchetes), entonces

alldata[ ## the resulting combination we have ## ]

en realidad eliminará los valores "Falsos" del marco de datos de todos los datos en el resultado, y tendrá un nuevo marco de datos que solo tiene los valores restantes, ¡que es lo que queríamos!

Luego exportaría esto como un nuevo archivo CSV. Puede aplicar operaciones o variaciones similares dentro de python para obtener todas las otras que sugerí en mi pregunta original.

Me he divertido mucho aprendiendo pandas y Python (tengo algo de experiencia en programación básica de la universidad), pero me doy cuenta de que algo de esto puede parecer intimidante. ¡Espero que no sea así y que esta respuesta ayude a alguien en una situación similar a la que yo estaba!