//编辑:这个问题是一个子问题。对于一个简短且更好的示例,它具有更好的答复,请选中This Post
我对python非常陌生,甚至对熊猫也较新。 我已经使用了至少一个月,而且我认为我已经将大部分基础知识都搞定了。
我当前的任务是在xslx文件内部的特定空间中将值写入certrain单元格中。
我有一个很大的excel文件,其中包含各种数据,从名称到 电子邮件地址和所有内容。我也有两个列表(.txt文件) 具有与excel文件相同的电子邮件地址,但是那些 电子邮件是否经过验证(如果它们符合某些安全要求)或 不。根据结果,它们被存储在 “ Secured.txt”或“ Unsecured.txt”文件。
我要使用熊猫来读写excel文件。
excel文件中“电子邮件”列旁边的一列中,如果电子邮件是安全的或不安全的,则在其中标记条目。我的实际任务是根据电子邮件所在的文本文件插入这些条目。
我解决此问题的方法是读出每个.txt文件,并使用列表和for循环将每个电子邮件地址存储在变量中。遍历这些电子邮件,我知道要在excel文件内查找电子邮件地址的位置并访问其旁边的单元格。同一行,不同列。由于之前已经对电子邮件进行了排序以匹配其安全性验证,因此我只需将相应的值放入电子邮件旁边的验证单元中即可。
我的问题如下:如何根据其中的值处理特定的行? 我想找到包含变量“ mails”实际内容的单元格的位置,因此我可以移到它旁边的单元格。因为我知道所有列的名称,所以实际上我只需要电子邮件所在行的索引。我得到了x坐标,需要y坐标。
到目前为止,我所得到的是.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”中的实际地址传递给某种熊猫的“定位”功能,以便找出实际电子邮件所在的行。一旦知道地址位于哪一行,我现在就可以告诉熊猫在下一列中写一个“ 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
我非常感谢您的帮助。
答案 0 :(得分:1)
为确保我理解您有一个受保护的文本文件和一个不受保护的文本文件。我正在做一个很大的假设,即您俩都没有电子邮件。
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()
也许是这样,尽管我不知道电子邮件的文本文件是什么样子。
答案 1 :(得分:0)
您的问题与内容不同。在某种程度上,这是一个简单的答案可能会很有用。
假设这是一个数据框:
Z = pd.DataFrame([1,2,4,6])
现在,让我们访问数字4。这里有一列。通常,第一列被分配名称0作为标题。所需的数字4位于数据框的第三位。当python从0开始列表,dfs,数组等的索引时,则数字4的索引数为2。
print(Z[0][2])
这将输出[4]
尝试在您的数据上应用相同的内容。只是男性一定知道标题的名称。有时它们不是数字,而是字符串。