Расположение строки на основе значения ячейки - PullRequest
0 голосов
/ 25 декабря 2018

// РЕДАКТИРОВАТЬ: Этот вопрос является своего рода подвопросом.Для более короткого и лучшего примера, который имеет лучшие ответы, отметьте This Post

Я очень новичок в Python и еще новее в пандах.Я работаю с ним, по крайней мере, месяц, и думаю, что я собрал большинство основ.

Моя текущая задача - записать значения в определенную ячейку, в определенном пространстве внутри xslx-файла..

Ситуация

  • У меня есть очень большой файл Excel, содержащий различные данные, от имен до адресов электронной почты и всего остального.Также у меня есть два списка (.txt-файлы) с одинаковыми адресами электронной почты в файле excel, но эти электронные письма были проверены, соответствуют ли они определенным проверкам безопасности или нет.В зависимости от результата они хранятся внутри файла «Secured.txt» или «Unsecured.txt».

  • Для записи и чтения в Excel-файле я использую pandas.

Задание

Рядом со столбцом «Электронные письма» в файле Excel есть столбец, в котором вы помечаете запись либо, если электронное письмо защищеноили без обеспечения.Моя настоящая задача состоит в том, чтобы вставить эти записи, в зависимости от того, в каком текстовом файле находится электронная почта.

Возможное решение

Мой подход к решению этой проблемы - прочитать каждый .txt-файл и сохранитькаждый адрес электронной почты в переменной, используя список и цикл for.Итерируя по этим электронным письмам, я знаю, что хочу найти местоположение адреса электронной почты внутри файла excel и получить доступ к ячейке рядом с ним. Та же строка, другой столбец.Поскольку электронные письма уже были отсортированы в соответствии с их проверкой безопасности, я просто могу вставить соответствующее значение в ячейку проверки рядом с письмом.

Вопрос

У меня следующий вопрос: Как мне подойти к определенной строке на основе значения в ней? Я хочу найти место в ячейке, которая включает в себяфактическое содержимое переменной «mails», так что я могу перейти к ячейке рядом с ней.Поскольку я знаю все имена столбцов, мне просто нужен индекс строки, в которой находится электронная почта.Я получил координату х и мне нужна координата у.

Пример

До сих пор у меня есть считывание .txt-файла:

import pandas as pd
import os
import re


#fetching the mail adress through indexnumber out of the list
with open('Protected/Protected G.txt', 'r') as file:

    #creating the regex pattern to sort out the mail adresses
    rgx = '\S+@\S+'

    #read the file and convert the list into a string
    content = file.readlines()
    content_str = ''.join(content)

    #get the mails out of the "list" with regex
    mails = re.findall(rgx, content_str)

    #put each mailadress in a variable
    for item in mails:
        print(item)

Этот фиктивный фрейм данных представляет лист Excel, с которым я работаюс помощью:

Dummy-Dataframe:

    Forename    Last Name   Email           Protection

1   John        Kennedy     John@gmx.net

2   Donald      Trump       Donald@gmx.net

3   Bill        Clinton     Bill@gmx.net

4   Richard     Nixton      Richard@gmx.net

Я знаю, что хочу передать фактический адрес, сохраненный в переменной 'item', в какую-то функцию "locate" панд , чтобы выяснить, в какой строкефактический адрес электронной почты лежит. Как только я узнаю, в какой строке находится адрес, я могу теперь сказать пандам написать либо «x», говоря, что почта защищена, либо «o», что означает, что почта не защищена., в следующем столбце.

Мой готовый кадр данных может выглядеть так:

Finished Dataframe:

    Forename    Last Name   Email           Protection

1   John        Kennedy     John@gmx.net    x

2   Donald      Trump       Donald@gmx.net  o

3   Bill        Clinton     Bill@gmx.net    x

4   Richard     Nixton      Richard@gmx.net x

Я очень ценю помощь.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

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

import pandas as pd

df = pd.read_csv('Protected/Protected G.txt', header = None, sep = " ")
df.columns = ['Protected Emails']

df2 = pd.read_excel('dummy-excel')

if df2['Email'].isin(df) :
    df2['Protection'] = 'x'
else :
    df2['Protection'] = 'o'

writer = pd.ExcelWriter('ProtectedEmails.xlsx')
df2.to_excel(writer,'Sheet1') #or whatever you want to name your sheet
writer.save()

возможно, что-то в этом роде, хотя я не знаю, как выглядит текстовый файл электронных писем.

0 голосов
/ 25 декабря 2018

Ваш вопрос отличается от содержания.Этот простой ответ может быть как-то полезен.

Предположим, что это фрейм данных: Z = pd.DataFrame([1,2,4,6])

Теперь давайте перейдем к номеру 4. Есть один столбец.Обычно первому столбцу присваивается имя 0 в качестве заголовка.Требуемое число 4 находится на третьем месте кадра данных.Когда python запускает индексы списков, dfs, массивов и т. Д. С 0, номер индекса с номером 4 равен 2.

print(Z[0][2])

Это приведет к выводу [4]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...