用pd读excel文件--2个邮件列表去重后,不包含的数据
这次是要读取两个excel的文件,然后查看tiany表中的邮箱不在spam中的邮箱,然后将结果另存为'email_result.xlsx'
知识点
- 读excel,没有列标题,命名标题
- 合并两个dataframe,然后找不同。用merge
- 取不包含*的值,再isin前面加 ~
- 写入csv,要注意是否包含了前面的索引
1、读excel
读excel文件
两个excel表都仅有邮箱一列,且无列名,所以在读取时要标明无列名,且要将列命名为'mail'.
下面的代码时错误的:
tianyan = pd.read_excel('C:/Users/*/Documents/tiany.xlsx',header=None)
出来之后标题是0,用rename函数也改不过来
然后在header= None后面加了 'names = 'mail' 还是不对,看不懂英文啊,吃大亏!!!
无奈求助大神,names都不会用?你看文档了吗?看不懂英文,来我教你看文档 (习惯性被鄙视(●ˇ∀ˇ●)
然后大神带着我看了一遍这个函数的英文解释才晓得,names后面应该是列表
header : int, list of ints, default 0
Row (0-indexed) to use for the column labels of the parsed DataFrame. If a list of integers is passed those row positions will be combined into a MultiIndex. Use None if there is no header.
names : array-like, default None
List of column names to use. If file contains no header row, then you should explicitly pass header=None
正确的应该是这个样子的:
tianyan = pd.read_excel('C:/Users/*/Documents/tiany.xlsx',header=None,names= ['mail'])
spam = pd.read_excel('C:/Users/*/Documents/spam.xlsx',header =None,names=['mail'])
两个表字段都命名为”mail",方便后期处理
然后在每个dataframe后面加一列,用于区分
tiany表在后面加了一列:tiany,
spam表在后面加了一列:spam (字段名和值相同)
tiany['tiany'] = 'tiany'
spam['spam'] = 'spam'
2、合并两个dataframe,找到tiany中没有包含spam的邮箱
谷歌后用pd.merge函数,参照举例及文档,选择left
pd.merge(tiany,spam, how= 'left', on = 'mail')
最后的行数与tiany相同,要取最后一列为NaN的数据
3、计算结果
要保留最后一列为NaN的邮箱列
如果用excel的话就很方便了,先筛选最后一列为'NaN'的值,然后筛选第一列的邮箱,复制到新表另存为即可。
在python的话,要先选择最后一列为'NaN'的值。选spam的好选,如果是'NaN'的话就要报错了。
上面这个图是看有多少是spam的值,下面这个图是把只选最后一列为“NaN”的值,记得在前面加一个
~表示反选。(网上太多人抄别人的文章了,就不能自己写吗  ̄へ ̄)
- 感谢STACK OVERFLOW网站,最后找到了反选的方法
这样还是没有完的,因为最后只保留第一列邮箱,其他的不要。所有上面的代码没问题,我就把值赋值给了email,然后再把最终结果保存到csv中
4、保存结果
先赋值给email_result
(新手就老老实实把步骤写好,打好基础,坑踩两次就好了)
email_result = email.mail
email_result
再保存
email_result.to_csv('C:/Users/xiaom/Documents/email_result.csv')
保存之后发现有索引,算了,就这样把,没啥影响。
第一篇博客就到这,用了这么久时间写,希望自己能不要重复踩坑,拜拜。
(写这么长,希望别被抄走了,转载、复制之类请发送站内信给我。虽然不一定会有人看到,但还是要说明一下)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。