在上期的推文中,我们介绍了使用openpyxl来进行公式的设置等操作,相关推文可以从本公众号的底部相关菜单获取。接下来的推文我们来学习一下openpyxl这个python模块中的其他知识,我们这次的推文来看一下怎么使用Python来进行排序。
在openpyxl中排序并没有实际效果,也就是说使用这个排序的操作会在相应的列头上设置相关的指令。假设现在我们有一个文件,如下所示:
我们来运行以下代码,看看有什么情况:
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列,后面的列表表示需要选择的关键字;第六行代码的作用是为指定的单元格范围添加排序条件。
运行代码以后的数据截图样式显示如下:可以发现,这个表格我们已经增加了相应的筛选按钮,且点击筛选按钮,可以看出Fruit列已经勾选了“Apple,Kiwi,Mango”等关键词。另外也可以通过打开Excel文件如果下拉筛选的按钮,就可以看出其已经勾选的项目了。
到目前,我没有发现可以直接实现过滤的方法。大家如果找到什么好的方法可以在微信公众号后台给我留言哈。
既然openpyxl不能够实现我们的功能,那么我们该怎么实现这个个过滤和排序呢?请继续看一下的方法。
Pandas是一个强大的第三方数据处理Python模块,能够实现很多的功能。(后期本公众号也会详细的出一点Pandas的教程),注意在pandas读取文件的时候要依赖包xlrd模块需要进行相应的安装。
那么对于上述文件,我们看该怎么进行数据的过滤和排序呢?
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)
输出结果:
可以看出上述的数据已经被排序了。
我们来解一下Pandas的这个sort_values()函数。第一个参数为by,为排序的列名称(字段)为列表,后面的ascending可选True和False为排序的方式。True为升序False为降序。
这里补充一个知识点,在进行排序的时候,如果还存在一个字段Price,那么如果我们使用以下的代码来进行排序,有什么作用呢?
df_2 = df.sort_values(['Fruit','Price'],ascending=False)
这行代码告诉我们,这个by参数不仅仅可以传入一个字符串,还能传入一个列表的。
那么这行代码的意思就是:以Fruit进行降序排列,当Fruit中有相同的值则按Price进行降序排序。
再看一行代码:
df_3 = df.sort_values(['Fruit','Price'],ascending=[False,True])
上述代码也是比较常用的类型之一,很显然对Fruit列进行排序对Price进行升序排列。
Tips: sort_values()函数有一个参数inplace,这个inplace 控制排序后的数据集替换原来的数据,默认为False,即不替换原来的数据。在进行排序结束之后,我们的最后操作就是将数据写入到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()
上述代码的作用就是将排序后的数据写入到原来的Excel文件中。
以上就是本次的推文,推文介绍的是在Excel中进行排序的相关操作,大家跟着学习的时候最好也跟着实践一下。后期我们将继续介绍其他方面的知识。大家在学习的时候有什么疑问或者发现有什么好的方法可以在公众号的后台告诉我们哦。