在上期的推文中潜秋,我們介紹了使用openpyxl來進行公式的設置等操作鹅龄,相關推文可以從本公眾號的底部相關菜單獲取赞警。接下來的推文我們來學習一下openpyxl這個python模塊中的其他知識宛乃,我們這次的推文來看一下怎么使用Python來進行排序厢破。
一、Openpyxl中的排序
在openpyxl中排序并沒有實際效果扫皱,也就是說使用這個排序的操作會在相應的列頭上設置相關的指令足绅。假設現(xiàn)在我們有一個文件,如下所示:
我們來運行以下代碼韩脑,看看有什么情況:
from openpyxl import *
workbook = load_workbook('sort_file.xlsx')
worksheet = workbook['Sheet1']
worksheet.auto_filter.ref = "A1:B12"
worksheet.auto_filter.add_filter_column(0, ["Kiwi", "Apple", "Mango"])
worksheet.auto_filter.add_sort_condition("B2:B12")
workbook.save("sort_file.xlsx")
代碼說明:第四行代碼表示需要過濾排序的范圍氢妈;第五行代碼增加了過濾的列,0表示第1列段多,后面的列表表示需要選擇的關鍵字首量;第六行代碼的作用是為指定的單元格范圍添加排序條件。
運行代碼以后的數(shù)據(jù)截圖樣式顯示如下:可以發(fā)現(xiàn)进苍,這個表格我們已經(jīng)增加了相應的篩選按鈕加缘,且點擊篩選按鈕,可以看出Fruit列已經(jīng)勾選了“Apple,Kiwi,Mango”等關鍵詞觉啊。另外也可以通過打開Excel文件如果下拉篩選的按鈕生百,就可以看出其已經(jīng)勾選的項目了。
到目前柄延,我沒有發(fā)現(xiàn)可以直接實現(xiàn)過濾的方法。大家如果找到什么好的方法可以在微信公眾號后臺給我留言哈缀程。
既然openpyxl不能夠?qū)崿F(xiàn)我們的功能搜吧,那么我們該怎么實現(xiàn)這個個過濾和排序呢?請繼續(xù)看一下的方法杨凑。
二滤奈、Pandas中的排序
Pandas是一個強大的第三方數(shù)據(jù)處理Python模塊,能夠?qū)崿F(xiàn)很多的功能撩满。(后期本公眾號也會詳細的出一點Pandas的教程)蜒程,注意在pandas讀取文件的時候要依賴包xlrd模塊需要進行相應的安裝绅你。
那么對于上述文件,我們看該怎么進行數(shù)據(jù)的過濾和排序呢昭躺?
import pandas as pd
data_test = pd.read_excel('sort_file.xlsx')
df = pd.DataFrame(data_test)
# 以列“Fruit”的標簽列來進行升序排列
df_1 = df.sort_values('Fruit',ascending=True)
print(df_1)
輸出結(jié)果:
可以看出上述的數(shù)據(jù)已經(jīng)被排序了忌锯。
我們來解一下Pandas的這個sort_values()函數(shù)。第一個參數(shù)為by领炫,為排序的列名稱(字段)為列表偶垮,后面的ascending可選True和False為排序的方式。True為升序False為降序帝洪。
這里補充一個知識點似舵,在進行排序的時候,如果還存在一個字段Price葱峡,那么如果我們使用以下的代碼來進行排序砚哗,有什么作用呢?
df_2 = df.sort_values(['Fruit','Price'],ascending=False)
這行代碼告訴我們砰奕,這個by參數(shù)不僅僅可以傳入一個字符串蛛芥,還能傳入一個列表的。
那么這行代碼的意思就是:以Fruit進行降序排列脆淹,當Fruit中有相同的值則按Price進行降序排序常空。
再看一行代碼:
df_3 = df.sort_values(['Fruit','Price'],ascending=[False,True])
上述代碼也是比較常用的類型之一,很顯然對Fruit列進行排序?qū)rice進行升序排列盖溺。
Tips: sort_values()函數(shù)有一個參數(shù)inplace漓糙,這個inplace 控制排序后的數(shù)據(jù)集替換原來的數(shù)據(jù),默認為False烘嘱,即不替換原來的數(shù)據(jù)昆禽。在進行排序結(jié)束之后,我們的最后操作就是將數(shù)據(jù)寫入到Excel中:
import pandas as pd
data_test = pd.read_excel('sort_file.xlsx')
df = pd.DataFrame(data_test)
# 以列“Fruit”的標簽列來進行升序排列
df_1 = df.sort_values('Fruit',ascending=True)
writer = pd.ExcelWriter('sort_file.xlsx')
df_1.to_excel(writer,sheet_name = 'Sheet1',index=False)
writer.save()
上述代碼的作用就是將排序后的數(shù)據(jù)寫入到原來的Excel文件中蝇庭。
三醉鳖、總結(jié)
以上就是本次的推文,推文介紹的是在Excel中進行排序的相關操作哮内,大家跟著學習的時候最好也跟著實踐一下盗棵。后期我們將繼續(xù)介紹其他方面的知識。大家在學習的時候有什么疑問或者發(fā)現(xiàn)有什么好的方法可以在公眾號的后臺告訴我們哦北发。