Pandas перебрать столбец с вложенным списком

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
Всем привет! У меня есть две таблицы dataframe. В каждой есть столбец с email типом object. Но в одной из двух таблиц имеется по несколько электронных почт в одной строке. Задача: Сравнить значение строки или каждое значение из строк в первой таблице со всеми email в другой таблицы и добавить новый столбец, где будет true(если было совпадение) или false(если сопадений нет). Проблема с которой сталкиваюсь состоит еще в том, что в некоторых строках есть значение None, которое упорно не хочет уходить с помощью .fillna()

1629268408930.png

Тут я сделал df.email.str.split(','), чтобы разбить их через запятую

1629268444155.png

Это df2 с которым сравниваю email
Подскажите, пожалуйста, логику как пройтись циклом сначала сначала по столбцу email, если там не пусто сравнить одно или несколько значений и добавить в новый столбец было совпадение или нет.

1629268520194.png

Я смог дойти только до такого, где отдельно получил каждое мыло и если это не тип list, то делаем другое действие. Проблемы начинаются в поиске совпадений по каждому значению и определению их к нужной строке в df, чтобы если нашлось совпадение добавить true в новый столбец по этой строке. Надеюсь достаточно правильно описал
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 592
460
83
ну в общем пришлось немного попотеть, ваши csv файлы наполовину битые, не читаются, я не смог добиться чтобы он все прочитал нормально, поэтому я пропускал битые строки...
Python:
import pandas as pd

data_account = pd.read_csv("AccountBase.csv", error_bad_lines=False)
email_account = data_account["emailaddress1"].tolist()
# print(email_account)


data_proceed = pd.read_csv("processed_2021-08-16_stom.csv", sep=";", comment="#", engine="python")
email_proceed = data_proceed["email"]
count = 0
for i in email_proceed:
    if isinstance(i, float):
        count += 1
        continue
    for j in i.split():
        if j.replace(",", "") in email_account:
            # Здесь выводиться строка из proceed, где нашлись совпадения в AccountBase.csv
            print(data_proceed.iloc[count])
        count += 1
где выводим строку, там дописываете true и сохраняете...
возможно, где то есть баги, не правильно ищет, сильно не тестил...

вообще это извращенность высшей степени на мой взгляд...
с такими объемами лучше использовать бд, ту же sqlite, с ней работать намного проще и приятнее...
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 592
460
83
что в некоторых строках есть значение None
не None а NaN наверное...
скиньте пример датафреймов, можно не целиком...
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
не None а NaN наверное...
скиньте пример датафреймов, можно не целиком...

Сравниваю processed с AccountBase
 

Вложения

  • df.zip
    84,9 КБ · Просмотры: 1

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 592
460
83
вам нужно выяснить, есть ли email из processed в AccountBase? и если есть добавить в AccountBase true, если нет - false?
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
Нет, чуть-чуть наоборот. Есть ли email из processed в AccountBase и если есть совпадение, то добавить в processed на эту строку true, если нет - false.Проблема заключается в том, что на одной строке может быть несколько email
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
вообще это извращенность высшей степени на мой взгляд...

Спасибо большое!
Буду дальше разбираться
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
где выводим строку, там дописываете true и сохраняете...

Привет!
Почему-то count считает все email адреса не могу разобраться в какой момент он езе добавляет в счетчик +1
Попробовал сначала все закинуть в массив и проверить. В итоге в массиве получается намного больше строчек, чем в файле processed
Те он добавляем каждое значение в массив по каждому адресу, который проверяет

1629371878122.png
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
Забыл про блок, где мы понимаем что это пустая строчка.
Но теперь стало намного больше1629373139630.png
 

Neket26

Новичок
Пользователь
Авг 18, 2021
18
0
1
Нашел в чем проблема
Он не записывает значения, где есть email адреса, но нет совпадений
И вот я не могу разобраться на каком этапе их записывать, когда он заканчивает цикл, но все равно получается неправильно
1629375283577.png
 

Форум IT Специалистов