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内容大概长这样(对不起!杰伦力宏紫棋):
ID | Author Full Names | 发了什么期刊、日期等等 |
---|---|---|
0 | Zhou, Jielun;Peng, Yuyan;Li, Bai;Xiu, Er | xxxx |
1 | Wang, Lihong;Zhang, San;Li, Si | xxxx |
2 | Deng, Ziqi ;Wang, Wu | xxxx |
这里一作就是杰伦,力宏,和紫棋。
思路
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。