Интуитивно понятный инструмент для фильтрации нескольких файлов CSV или нескольких столбцов в одном файле CSV со сложными запросами IF

У меня есть большой список адресов электронной почты, на который я веду трансляции, и у каждого подписчика есть несколько тегов. Моя система рассылки электронной почты позволяет мне загружать каждый тег в виде отдельного CSV-файла, содержащего все адреса электронной почты с тегами* и не содержащего адреса без тега.

Мне нужно комбинировать эти теги сложным образом, чтобы я мог по существу создать новый набор тегов для загрузки обратно на сайт в виде нового импортируемого файла CSV.

Программное обеспечение будет работать либо с исходными файлами CSV (что было бы менее трудоемко для меня), либо с результирующим файлом, который я создал бы, объединив их все в файл CSV с электронными письмами в качестве первого столбца и тегами во всех остальных столбцах. , с некоторым логическим значением 1/0 или да/нет и т. д.

Это не будет одноразовым, поэтому часто необходимо наличие системы для выполнения этих процессов.

Анализ данных для создания нового файла

Я хотел бы взять данные (будь то из отдельных файлов CSV с одним столбцом или просто из полученного нового одного файла CSV с несколькими столбцами) и сравнить комбинации да/нет тегов для каждого электронного письма и на основе комбинаций (см. ниже), решите, будет ли это письмо включено или проигнорировано.

Это может быть простой случай добавления нового столбца 0 или 1 в тот же «большой» CSV-файл (который затем я мог бы добавить дополнительный шаг фильтрации только «1» в окончательный CSV-файл) или добавление/не добавление этого электронного письма в окончательный файл CSV.

Нужны сложные операции

Вот пример процессов, которые мне нужно запустить:

  • все из (tag1, tag7, tag8) и НЕ (tag2, tag20)
  • не менее 2 из любого из (tag11, tag12, tag13, tag14, tag15, tag16, tag17, tag18)
  • (если присутствует tag17 И любой из (tag22, tag23, tag24)) ИЛИ (если присутствует tag18, И любой из (tag25, tag26, tag27))
  • только тег24, а НЕ любой другой тег
  • только tag24, а НЕ любой из (tag 11, tag12, tag13, tag14)

Из некоторых исследований в Интернете я вижу, что решение моей проблемы, скорее всего, включает в себя написание кода на Python или аналогичном, но я надеюсь, что есть удобное программное приложение, которое может это сделать, чтобы я мог достичь того, что я' хотелось бы без кодирования.

Если требуется кодирование, в идеале оно должно быть сведено к минимуму, или у меня был бы готовый сценарий, в котором мне нужно было бы только изменить источники файлов и запросы if . Мне удобно писать структуры if . В противном случае у меня есть базовый опыт кодирования, и я могу узнать, что мне нужно делать в этой программной среде.

У меня есть Excel 2017 (может быть, есть подключаемый модуль, о котором я не знаю, для моих сложных фильтров), и я могу заплатить за программное обеспечение, чтобы сделать это, если это необходимо, в зависимости от его функциональности, хотя функции, выходящие за рамки того, что я описал здесь, не т необходимо.

Спасибо за любые рекомендации!!

* Загруженный файл CSV также имеет свое имя в другом столбце, но я бы удалил его для целей этого процесса.

Ответы (2)

Я бы загрузил его в PostgreSQL, а затем использовал бы SQL для запроса. Это довольно сложные операции.

Я задавал аналогичный вопрос, связанный с той же проблемой , и в конце концов пришел к ответу, который я могу применить прямо здесь.

Простая программа для выполнения этого в графическом или ином очень простом интерфейсе может существовать, а может и не существовать, но по сути кажется, что проще всего это сделать на сегодняшний день с помощью библиотеки pandas в Python . Вот документация по настройке .

Одна из основных причин заключается в том, что этот язык программирования очень прост в изучении (в большей степени, чем SQL, предложенный другим ответчиком, и я не согласен с тем, что операции настолько сложны), и я бы сказал, что вы могли бы справиться с это с днем ​​изучения основ программирования на Python (особенно если вы изучали какую-либо форму программирования в прошлом) и понимания базовой логической логики.

Взяв первый пример, который я привел, и то, как он будет реализован в Python, с импортированной библиотекой pandas (и удалением некоторого другого кода, такого как настройка баз данных и т. д.), его можно будет отобразить примерно следующим образом, предполагая, что таблица с заполненными столбцами с этими тегами и значениями в ячейках как True или False:

  • все из (tag1, tag7, tag8) и НЕ (tag2, tag20)

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

Чтобы объяснить это вкратце, если ваши данные импортированы в фрейм данных со значениями под названием «alldata», то вызов «alldata[tag1]» вернет список переменных True и False в одномерном массиве, соответствующих точкам в кадр данных, где tag1 является истинным или ложным. Затем

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

объединит каждый из этих трех тегов, так что вы получите массив одинаковой длины, но теперь он получает значения True только тогда, когда все три из них были True, и false в противном случае.

Сходным образом,

alldata[tag2] | alldata[tag20]

объединит массив True/False для tag2 и tag20 и вернет значения True, если одно из них истинно, и False, только если оба являются False.

Операция ~ инвертирует это и превращает все True в False и все False в True.

Затем & между первой и второй частями объединит их так, что результирующие части массива останутся истинными, только если ответ был истинным как в первой, так и во второй.

Это оставляет вас с результирующим массивом значений True и False, где «True» соответствует точке, где все tag1, tag7 и tag8 являются истинными, а tag2 или tag20 — ложными.

Но если вы вернете этот новый массив обратно как вызов между квадратными скобками (до сих пор мы передавали только tagX в квадратные скобки), тогда

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

фактически удалит значения «False» из фрейма данных alldata в результате, и у вас будет новый фрейм данных, который имеет только оставшиеся значения, чего мы и хотели!

Затем вы экспортируете это как новый файл CSV. Вы можете применить аналогичные операции или варианты в python, чтобы получить все остальные, которые я предложил в своем исходном вопросе.

Мне было очень весело изучать pandas и Python (у меня есть базовый опыт программирования в колледже), но я понимаю, что некоторые из них могут показаться пугающими. Я надеюсь, что это не так, и этот ответ поможет кому-то в ситуации, похожей на ту, в которой я был!