pandas 根据筛选条件对指定excel列进行筛选

pandas 根据筛选条件对指定excel列进行筛选

这两天老师要求筛选一下最近几年学院发表的文章,从图书馆那要了份数据量较大的excel,将该excel分成学生文章、老师文章两份excel,以第一作者为区分,B站学习法稍微补了补python操作excel,看到pandas就顺手用一下了……大佬勿喷,仅仅是稍微学了一下。

导入需要筛选的excel和筛选条件

import pandas as pd

df = pd.read_excel('D:/py_project/datafenxi/scut.xls',sheet_name='savedrecs')
ji_he = {'name1','name2','name3',任意多个name}

这里的ji_he是提供的学院所有老师的姓名,与下面的要筛选的表格A做匹配,标记出A中一作为老师的论文。那剩下的未标记就是学生。

要筛选的表格A

excel内容大概长这样(对不起!杰伦力宏紫棋):

IDAuthor Full Names发了什么期刊、日期等等
0Zhou, Jielun;Peng, Yuyan;Li, Bai;Xiu, Erxxxx
1Wang, Lihong;Zhang, San;Li, Sixxxx
2Deng, Ziqi ;Wang, Wuxxxx

这里一作就是杰伦,力宏,和紫棋。

思路

1、由于我们只要第一作者,所以对要筛选的表格A的Author Full Names列进行遍历,按;分割成数组取第0个元素,因为拿到的表格一作的格式千奇百怪,还有-等等莫名字符,所以稍微改了下。
2、拿到的每行A表格的一作名字,与指定老师名单做匹配,True则记录下该索引ID,并给值teacher创建sheet1
3、使用merg()将要筛选的表格A与sheet1做匹配整合成一张表。

while i < len(df):
    a = df.loc[i, 'Author Full Names']  # 取出Author Full Names列的第i行
    a1 = str(a).split(';')[0].replace('-', '')   # 筛选第i行AFN列的内容,按;分割成数组取第0个元素,删除-字符返回a1
    # print('q', a1)
    if a1 in ji_he:
        print('qq', i)    # 获取匹配的索引
        df3.loc[i] = ['teacher']   # 给匹配出来的一作老师标上teacher
        df3.to_excel("D:/py_project/datafenxi/outputscut.xls")   # 输出为新的列表
    i += 1

这里我们可以拿到一个根据A匹配出来的一作是老师身份的索引表sheet1,like this:在这里插入图片描述
然后用merge()根据ID将两份表拼成一份完整表,就基本完成需求了(分成两份表我直接选择excel做透视了,又懒又菜说的就是我)

import pandas as pd

sheet1 = pd.read_excel('D:/py_project/datafenxi/scut.xls', sheet_name='savedrecs', index_col='ID')
sheet2 = pd.read_excel('D:/py_project/datafenxi/scut.xls', sheet_name='Sheet1', index_col='ID')

table = sheet1.merge(sheet2, how='left', on='ID')
table.to_excel("D:/py_project/datafenxi/outputfinal.xls")
print(table)

结果

这部分语法可以参考B站视频 Link,记得把两个sheet放在一个excel里面(其实我看到了其他大佬直接将多个sheet输出在一个excel,但我没时间改了,之后看看。)
以下是最终结果,表格最右边区分身份:teacher,空为student。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值