Pandas根據篩選條件對指定excel列進行篩選!神器!

pythonlaodi發表於2020-11-02

 

這兩天老師要求篩選一下最近幾年學院發表的文章,從圖書館那要了份資料量較大的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內容大概長這樣(對不起!杰倫力巨集紫棋):

 

這裡一作就是杰倫,力巨集,和紫棋。

思路

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。

PS:如有需要Python學習資料的小夥伴可以加點選下方連結自行獲取

python免費學習資料以及群交流解答點選即可加入

 

相關文章